diff --git a/CompressionManager.cpp b/CompressionManager.cpp index 0c934b8..27a2435 100644 --- a/CompressionManager.cpp +++ b/CompressionManager.cpp @@ -23,6 +23,9 @@ CompressionManager::CompressionManager() :cctx(ZSTD_createCCtx()) ,dctx(ZSTD_createDCtx()) { + // Tu ustawienia pod kompresję + const int level = COMPRESSION_LEVEL; + // Ustawienia frameless size_t rc = 0; @@ -39,7 +42,7 @@ CompressionManager::CompressionManager() rc |= ZSTD_CCtx_setParameter(cctx, ZSTD_c_dictIDFlag, 0); // Ustawia poziom kompresji - rc |= ZSTD_CCtx_setParameter(cctx, ZSTD_c_compressionLevel, zstd::compression_level); + rc |= ZSTD_CCtx_setParameter(cctx, ZSTD_c_compressionLevel, level); if (ZSTD_isError(rc)) { std::cerr << "ZSTD_CCtx_setParameter error" << std::endl; diff --git a/CompressionManager.h b/CompressionManager.h index 5f747fb..83eef36 100644 --- a/CompressionManager.h +++ b/CompressionManager.h @@ -30,10 +30,7 @@ #error "Wymagane zstd >= 1.4.0 dla ZSTD_c_format / ZSTD_f_zstd1_magicless" #endif -namespace zstd -{ - inline constexpr short compression_level = 3; -} +#define COMPRESSION_LEVEL 3 class CompressionManager { diff --git a/CreateCargo.cpp b/CreateCargo.cpp index fe6f7aa..b24a880 100644 --- a/CreateCargo.cpp +++ b/CreateCargo.cpp @@ -22,6 +22,7 @@ CreateCargo::CreateCargo() : signature(fl::sigpak) , extension(fl::extpak) + , version(VERSION) , methodFlags(0) , xxhState(XXH64_createState()) , offset(0) @@ -132,11 +133,11 @@ bool CreateCargo::GetFileList(const std::string& path) { if (FindOnTheList(zipList, fileRef) || CheckFileExtension(fileRef, zipList)) { - pc.parameter = FindOnTheList(encList, fileRef) || CheckFileExtension(fileRef, encList) ? flag::ezd : flag::zip; + pc.parameter = FindOnTheList(encList, fileRef) || CheckFileExtension(fileRef, encList) ? FILE_FLAG_ZIPENC : FILE_FLAG_COMPRESS; } else { - pc.parameter = FindOnTheList(encList, fileRef) || CheckFileExtension(fileRef, encList) ? flag::enc : flag::raw; + pc.parameter = FindOnTheList(encList, fileRef) || CheckFileExtension(fileRef, encList) ? FILE_FLAG_ENCRYPT : FILE_FLAG_RAW; } pc.path = PathToUnixLike(tmpPath); std::cout << pc.path << " - " << pc.parameter << std::endl; diff --git a/CreateCargo.h b/CreateCargo.h index 279930f..958dcf2 100644 --- a/CreateCargo.h +++ b/CreateCargo.h @@ -72,6 +72,7 @@ public: private: const std::string signature; const std::string extension; + const signed char version; uint8_t methodFlags; diff --git a/DataStruct.h b/DataStruct.h index 91bf253..75f5a79 100644 --- a/DataStruct.h +++ b/DataStruct.h @@ -22,15 +22,37 @@ #include #include -namespace ui -{ - inline constexpr std::string_view title = "exPak"; - inline constexpr std::string_view ver = "0.5"; -} +#define EXTENSION "pak" +#define SIGNATURE "XPAK" + +#define SIGNATURE_KEY_FILE "XKEY" + +#define VERSION 0x03 + +// Wielkość pojedynczego bloku strumienia +#define CHUNK_STREAM_512KB 524288 // 512KB +#define CHUNK_STREAM_16MB 16777216 // 16MB +#define CHUNK_STREAM_256MB 268435456 // 256MB + +// Rozmiar pojedynczego bloku +#define CHUNK_BLOCK_SIZE 131072 // 128KB + +#define FILE_FLAG_RAW 0x00 +#define FILE_FLAG_COMPRESS 0x0F +#define FILE_FLAG_ENCRYPT 0xF0 +#define FILE_FLAG_ZIPENC 0xFF + +#define FILE_FLAG_FILTERING 0xAB + +//Prgoram title +#define PROGRAM_TITLE "eXtendet PAK" +#define PROGRAM_VERSION "v0.5" +#define PROGRAM_AUTHOR "Yanczi" +#define PROGRAM_COMPILING "19 December 2025" +#define PROGRAM_LICENSE "GNU LGPL v3" // Pliki -namespace fl -{ +namespace fl { inline constexpr std::string_view sigpak = "XPAK"; inline constexpr std::string_view sigkey = "XKEY"; diff --git a/EncryptionManager.cpp b/EncryptionManager.cpp index a44085e..832d6e5 100644 --- a/EncryptionManager.cpp +++ b/EncryptionManager.cpp @@ -67,6 +67,9 @@ void EncryptionManager::generateKeys() void EncryptionManager::saveKey(const std::string& path, bool hpp) { + const std::string sig = SIGNATURE_KEY_FILE; + const int8_t ver = VERSION; + // Wygeneruj time stamp std::time_t now = std::time(nullptr); const int time = static_cast(now); @@ -75,13 +78,14 @@ void EncryptionManager::saveKey(const std::string& path, bool hpp) std::vector keyVec(reinterpret_cast(key.data()), reinterpret_cast(key.data()) + key.size()); - const uint64_t crcKey = XXH64(keyVec.data(), keyVec.size(), 0); + const uint64_t crcKey = XXH64(keyVec.data(), keyVec.size(), VERSION); // Zapisz ten śmietnik do pliku KEY std::ofstream file(path + ".key", std::ios::binary); if (!file) { std::cout << "Failed to save encryption key to file" << std::endl; } - file.write(fl::sigkey.data(), fl::sigkey.length()); + file.write(sig.data(), sig.length()); + file.write(reinterpret_cast(&ver), sizeof(ver)); file.write(reinterpret_cast(&time), sizeof(time)); file.write(reinterpret_cast(keyVec.data()), keyVec.size()); file.write(reinterpret_cast(&crcKey), sizeof(crcKey)); @@ -98,7 +102,7 @@ void EncryptionManager::saveCppHeadFile(const std::string& path) std::ofstream file(path + ".hpp"); - file << "// Plik wygenerowany przez " << ui::title << " " << ui::ver << std::endl; + file << "// Plik wygenerowany przez " << PROGRAM_TITLE << " " << PROGRAM_VERSION << std::endl; file << std::endl; file << std::endl; file << "#pragma once" << std::endl; @@ -133,15 +137,18 @@ std::string EncryptionManager::toHex(const unsigned char* data, size_t len) void EncryptionManager::loadKey(const std::string& path) { std::ifstream file(path + ".key", std::ios::binary); - std::vector sig(fl::sigkey.size()); + + const std::string signature = SIGNATURE_KEY_FILE; + std::vector sig(signature.size()); int8_t ver; int time; // Wczytaj file.read(sig.data(), sig.size()); + file.read(reinterpret_cast(&ver), sizeof(ver)); // Sprawdź czy plik klucza jest poprawny - if (std::string(sig.begin(), sig.end()) != fl::sigkey) + if (std::string(sig.begin(), sig.end()) != signature || ver != VERSION) { throw std::runtime_error("Invalid key file!"); } @@ -154,7 +161,7 @@ void EncryptionManager::loadKey(const std::string& path) file.read(reinterpret_cast(&crcKey), sizeof(crcKey)); // Sprawdź integralność klucza - if (XXH64(keyVec.data(), keyVec.size(), 0) != crcKey) + if (XXH64(keyVec.data(), keyVec.size(), VERSION) != crcKey) { throw std::runtime_error("Key integrity error!"); } diff --git a/ExtractCargo.cpp b/ExtractCargo.cpp index c944347..3d1398a 100644 --- a/ExtractCargo.cpp +++ b/ExtractCargo.cpp @@ -23,7 +23,7 @@ ExtractCargo::ExtractCargo() :filesLen(0) , tablePosition(0) , xxhState(XXH64_createState()) - , signature(fl::sigpak) + , signature(SIGNATURE) { // TODO Auto-generated constructor stub XXH64_reset(xxhState, 0); diff --git a/ViewCargo.cpp b/ViewCargo.cpp index 9b95d12..ed04866 100644 --- a/ViewCargo.cpp +++ b/ViewCargo.cpp @@ -59,7 +59,8 @@ bool ViewCargo::ViewFiles(const std::string& path) uint64_t tabPos = 0; uint32_t tabSize = 0; - std::vector magic(fl::sigpak.length()); + const std::string signature = SIGNATURE; + std::vector magic(signature.length()); int8_t cargoVer = 0; std::ifstream cargo(path, std::ios::binary); @@ -81,7 +82,7 @@ bool ViewCargo::ViewFiles(const std::string& path) cargo.read(reinterpret_cast(&tabSize), sizeof(tabSize)); //Sprawdź czy kontener ma poprawną sygnature - if (std::string(magic.begin(), magic.end()) != fl::sigpak) + if (std::string(magic.begin(), magic.end()) != signature) { std::cerr << "Error: Corrupted Cargo" << std::endl; cargo.close(); @@ -128,15 +129,15 @@ void ViewCargo::ShowFile(const std::string& file, const uint8_t& flag) // Ustawianie checkboxów switch (flag) { - case flag::zip: + case FILE_FLAG_COMPRESS: compresedCheck = "[x]"; break; - case flag::enc: + case FILE_FLAG_ENCRYPT: encryptedCheck = "[x]"; break; - case flag::ezd: + case FILE_FLAG_ZIPENC: compresedCheck = "[x]"; encryptedCheck = "[x]"; break; diff --git a/voidcmd.cpp b/voidcmd.cpp index 22e1520..eb20331 100644 --- a/voidcmd.cpp +++ b/voidcmd.cpp @@ -80,16 +80,16 @@ static bool EmptyPath(std::string path) } int main(int argc, char* argv[]) { - std::cout << ui::title << std::endl << "ver. " << ui::ver << std::endl; - std::cout << "Author: Yanczi" << std::endl; - std::cout << "License: GNU LGPL v3" << "\n" << std::endl; + std::string path = ""; + + std::cout << PROGRAM_VERSION << " Release " << PROGRAM_COMPILING << std::endl; + std::cout << "Author: " << PROGRAM_AUTHOR << std::endl; + std::cout << "License: " << PROGRAM_LICENSE << "\n" << std::endl; CreateCargo cargo; ExtractCargo extract; ViewCargo viewCargo; - std::string path = ""; - for (int i = 0; i < argc; ++i) { std::string arg = argv[i];