From e258f15b8b935fae889e5cce4a39d6ac3f3c1c5b Mon Sep 17 00:00:00 2001 From: p0358 Date: Thu, 9 Dec 2021 01:05:47 +0100 Subject: [PATCH 01/18] Fix Titanfall Online pkg file parsing/decrypting --- headers/pkg/pkgfileimpl.hpp | 8 ++-- headers/pkg/pkgstructures.hpp | 14 ++++++ sources/pkg/pkgentry.cpp | 10 ++++- sources/pkg/pkgfile.cpp | 30 +++++++------ .../d0112b5fb371db812eb586c3d8d19f4f.pkg | Bin 0 -> 230865 bytes tests/tfo/nexon/settings.hpp | 8 ++-- tests/tfo/nexon/test_pkgfile.cpp | 40 ++++++++++++++++++ 7 files changed, 88 insertions(+), 22 deletions(-) create mode 100644 tests/gamefiles/d0112b5fb371db812eb586c3d8d19f4f.pkg diff --git a/headers/pkg/pkgfileimpl.hpp b/headers/pkg/pkgfileimpl.hpp index 4c290e9..b3848de 100644 --- a/headers/pkg/pkgfileimpl.hpp +++ b/headers/pkg/pkgfileimpl.hpp @@ -45,7 +45,7 @@ class PkgFileImpl : public PkgFile std::string szDataKey = {}, PkgFileOptions* pOptions = nullptr); - template + template std::uint64_t GetFullHeaderSizeInternal() const; private: @@ -60,7 +60,7 @@ class PkgFileImpl : public PkgFile template bool DecryptHeaderInternal(); - template + template void ParseEntries(); void UpdateEntriesDataView(); @@ -68,8 +68,8 @@ class PkgFileImpl : public PkgFile template PkgHeaderType* GetPkgHeader() const; - template - PkgEntryHeader_t* GetEntriesHeader() const; + template + PkgEntryHeaderType* GetEntriesHeader() const; private: std::string m_szFilename; diff --git a/headers/pkg/pkgstructures.hpp b/headers/pkg/pkgstructures.hpp index eb9e9bb..373fa65 100644 --- a/headers/pkg/pkgstructures.hpp +++ b/headers/pkg/pkgstructures.hpp @@ -59,5 +59,19 @@ struct PkgEntryHeader_t static_assert(sizeof(PkgEntryHeader_t) == 288, "The pkg entry header's size must be 288 bytes long"); +struct PkgEntryHeaderTfo_t +{ + char szFilePath[260 + 1]; + std::uint64_t iOffset; + std::uint64_t iEncryptedSize; + std::uint64_t iDecryptedSize; + std::uint8_t Unknown285; + std::uint8_t bIsEncrypted; + std::uint8_t Pad[1]; +}; + +static_assert(sizeof(PkgEntryHeader_t) == 288, + "The TFO pkg entry header's size must be 288 bytes long"); + #pragma pack(pop) } // namespace uc2 diff --git a/sources/pkg/pkgentry.cpp b/sources/pkg/pkgentry.cpp index 2311565..21cb9b9 100755 --- a/sources/pkg/pkgentry.cpp +++ b/sources/pkg/pkgentry.cpp @@ -70,6 +70,13 @@ std::pair PkgEntryImpl::DecryptFile( "libuncso2: The entry's file data is empty."); } + if (iBytesToDecrypt > this->m_iDecryptedSize) + { + throw std::invalid_argument( + "libuncso2: The amount of bytes requested to decrypt is bigger " + "than decrypted file size."); + } + const bool bDecryptAll = iBytesToDecrypt == 0; const std::uint64_t iAlignedBytes = bDecryptAll == true ? 0 : RoundNumberToBlock(iBytesToDecrypt); @@ -142,7 +149,8 @@ std::pair PkgEntryImpl::HandleEncryptedFile( const std::uint64_t iTargetEncDataSize = bDecryptAll == true ? this->m_iEncryptedSize : iBytesToDecrypt; const std::uint64_t iTargetDecDataSize = - bDecryptAll == true ? this->m_iDecryptedSize : iBytesToDecrypt; + bDecryptAll == true ? this->m_iDecryptedSize : + std::min(this->m_iDecryptedSize, iBytesToDecrypt); // The data must be decrypted each PKG_DATA_BLOCK_SIZE (which at the // time of writing this is 65536), or else only the first 65536 diff --git a/sources/pkg/pkgfile.cpp b/sources/pkg/pkgfile.cpp index f5cae54..0eb89b1 100755 --- a/sources/pkg/pkgfile.cpp +++ b/sources/pkg/pkgfile.cpp @@ -166,11 +166,13 @@ std::uint64_t PkgFileImpl::GetFullHeaderSize() { if (this->m_bIsTfoPkg == true) { - return PkgFileImpl::GetFullHeaderSizeInternal(); + return PkgFileImpl::GetFullHeaderSizeInternal(); } else { - return PkgFileImpl::GetFullHeaderSizeInternal(); + return PkgFileImpl::GetFullHeaderSizeInternal(); } } @@ -179,7 +181,7 @@ std::string_view PkgFileImpl::GetMd5Hash() return this->m_szMd5Hash; } -template +template std::uint64_t PkgFileImpl::GetFullHeaderSizeInternal() const { if (this->IsHeaderDecryptedInternal() == false) @@ -197,7 +199,7 @@ std::uint64_t PkgFileImpl::GetFullHeaderSizeInternal() const auto pPkgHeader = this->GetPkgHeader(); return PKG_HEADER_SKIP_HASH_OFFSET + sizeof(PkgHeaderType) + - pPkgHeader->iEntries * sizeof(PkgEntryHeader_t); + pPkgHeader->iEntries * sizeof(PkgEntryHeaderType); } bool PkgFileImpl::DecryptHeader() @@ -241,11 +243,11 @@ void PkgFileImpl::Parse() if (this->m_bIsTfoPkg == true) { - this->ParseEntries(); + this->ParseEntries(); } else { - this->ParseEntries(); + this->ParseEntries(); } } @@ -277,7 +279,7 @@ bool PkgFileImpl::DecryptHeaderInternal() return true; } -template +template void PkgFileImpl::ParseEntries() { if (this->IsHeaderDecryptedInternal() == false) @@ -290,19 +292,19 @@ void PkgFileImpl::ParseEntries() this->m_FileDataView.subspan(0, PKG_HEADER_SKIP_HASH_OFFSET).data()); auto pPkgHeader = this->GetPkgHeader(); - auto pEntries = this->GetEntriesHeader(); + auto pEntries = this->GetEntriesHeader(); const std::uint64_t iDataStartOffset = PKG_HEADER_SKIP_HASH_OFFSET + sizeof(PkgHeaderType) + - pPkgHeader->iEntries * sizeof(PkgEntryHeader_t); + pPkgHeader->iEntries * sizeof(PkgEntryHeaderType); CAesCipher cipher; CDecryptor decryptor(&cipher, this->m_szHashedEntryKey, false); for (std::uint32_t i = 0; i < pPkgHeader->iEntries; i++) { - PkgEntryHeader_t* entry = &pEntries[i]; - decryptor.DecryptInBuffer(entry, sizeof(PkgEntryHeader_t)); + PkgEntryHeaderType* entry = &pEntries[i]; + decryptor.DecryptInBuffer(entry, sizeof(PkgEntryHeaderType)); auto pNewEntry = std::make_unique( entry->szFilePath, iDataStartOffset + entry->iOffset, @@ -333,12 +335,12 @@ PkgHeaderType* PkgFileImpl::GetPkgHeader() const return reinterpret_cast(data); } -template -PkgEntryHeader_t* PkgFileImpl::GetEntriesHeader() const +template +PkgEntryHeaderType* PkgFileImpl::GetEntriesHeader() const { std::uint64_t data = reinterpret_cast(this->m_FileDataView.data()); data += PKG_HEADER_SKIP_HASH_OFFSET + sizeof(PkgHeaderType); - return reinterpret_cast(data); + return reinterpret_cast(data); } } // namespace uc2 \ No newline at end of file diff --git a/tests/gamefiles/d0112b5fb371db812eb586c3d8d19f4f.pkg b/tests/gamefiles/d0112b5fb371db812eb586c3d8d19f4f.pkg new file mode 100644 index 0000000000000000000000000000000000000000..71d0ccadbad499ec4d5f04765b4afdfe62903c2f GIT binary patch literal 230865 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

3QR)G@ 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

=y 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%0DpJFRGUi$a@%}hIOF;NkF#0XUf+0#%p>) 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 NZVYE*+>df9cSL)NR{H<| literal 0 HcmV?d00001 diff --git a/tests/tfo/nexon/settings.hpp b/tests/tfo/nexon/settings.hpp index e58bea8..37e8bb3 100644 --- a/tests/tfo/nexon/settings.hpp +++ b/tests/tfo/nexon/settings.hpp @@ -33,20 +33,22 @@ constexpr const std::uint8_t IndexKeyCollection[4][16] = { // // PKG data START // -const std::string PkgFilename = "0a4b4196394ecf251c532f1552ccf3b3.pkg"s; const std::string PackageEntryKey = "lkgui781kl789sd!@#%89&^sd"s; - const std::string PackageFileKey = "^9gErg2Sx7bnk7@#sdfjnh@"s; +const std::string PkgFilename = "0a4b4196394ecf251c532f1552ccf3b3.pkg"s; constexpr const std::uint64_t PackageFileCount = 4; - const std::array PackageFileHashes = { "42d3b7b74b8feb7f6801930ba58aef6bb85fa2d8a465cffef36c906566cbeeb4", "58389be7fbcaa33e143c8e7ed85b7ed73e5d69d095972e9d260a4171ed959224", "2968dce6245f50c7ae9803e1b765ff9ed7705a459c4041f4623a46dea24b9873", "638f05cce5002f65917125931a07f2541b4fca6819623950f9c306bba18d9ae7", }; + +const std::string PkgFilename2 = "d0112b5fb371db812eb586c3d8d19f4f.pkg"s; +constexpr const std::uint64_t PackageFileCount2 = 8; + // // PKG data END // diff --git a/tests/tfo/nexon/test_pkgfile.cpp b/tests/tfo/nexon/test_pkgfile.cpp index a4e79cc..ce64ee0 100644 --- a/tests/tfo/nexon/test_pkgfile.cpp +++ b/tests/tfo/nexon/test_pkgfile.cpp @@ -124,6 +124,46 @@ TEST_CASE("TFO Pkg file partially decrypting an entry", "[pkgfile]") throw e; } } + SECTION("Can decrypt an 8 byte entry") + { + auto [bWasRead, vFileBuffer] = ReadFileToBuffer(tfo::PkgFilename2); + + REQUIRE(bWasRead == true); + REQUIRE(vFileBuffer.empty() == false); + + try + { + auto pPkgOptions = uc2::PkgFileOptions::Create(); + pPkgOptions->SetTfoPkg(true); + + auto pPkgFile = uc2::PkgFile::Create( + tfo::PkgFilename, vFileBuffer, tfo::PackageEntryKey, + tfo::PackageFileKey, pPkgOptions.get()); + + pPkgFile->DecryptHeader(); + pPkgFile->Parse(); + + REQUIRE(pPkgFile->GetEntries().size() == tfo::PackageFileCount2); + + constexpr const std::uint64_t iEncryptedFileLen = 16; + constexpr const std::uint64_t iTargetFileLen = 8; + + auto&& entry = pPkgFile->GetEntries().at(0); + REQUIRE(entry->IsEncrypted()); + REQUIRE(entry->GetEncryptedSize() == iEncryptedFileLen); + REQUIRE(entry->GetDecryptedSize() == iTargetFileLen); + REQUIRE(entry->GetFilePath() == "/r1/datarevision.txt"); + auto [fileData, fileDataLen] = entry->DecryptFile(entry->GetDecryptedSize()); + + REQUIRE(fileDataLen == iTargetFileLen); + REQUIRE(strcmp(reinterpret_cast(fileData), "17973 \r\n") == 0); + } + catch (const std::exception& e) + { + std::cerr << e.what() << '\n'; + throw e; + } + } } TEST_CASE("TFO Pkg file can be decrypted and parsed using C bindings", From 71004845ae65d80f3e712caaaae4563b5eb3779a Mon Sep 17 00:00:00 2001 From: p0358 Date: Thu, 9 Dec 2021 02:45:20 +0100 Subject: [PATCH 02/18] Update pkg file tests for TFO --- tests/tfo/nexon/settings.hpp | 33 ++++++++---- tests/tfo/nexon/test_pkgfile.cpp | 90 +++++++++++++++++++------------- 2 files changed, 78 insertions(+), 45 deletions(-) diff --git a/tests/tfo/nexon/settings.hpp b/tests/tfo/nexon/settings.hpp index 37e8bb3..150436d 100644 --- a/tests/tfo/nexon/settings.hpp +++ b/tests/tfo/nexon/settings.hpp @@ -37,18 +37,31 @@ constexpr const std::uint8_t IndexKeyCollection[4][16] = { const std::string PackageEntryKey = "lkgui781kl789sd!@#%89&^sd"s; const std::string PackageFileKey = "^9gErg2Sx7bnk7@#sdfjnh@"s; -const std::string PkgFilename = "0a4b4196394ecf251c532f1552ccf3b3.pkg"s; -constexpr const std::uint64_t PackageFileCount = 4; -const std::array PackageFileHashes = { - "42d3b7b74b8feb7f6801930ba58aef6bb85fa2d8a465cffef36c906566cbeeb4", - "58389be7fbcaa33e143c8e7ed85b7ed73e5d69d095972e9d260a4171ed959224", - "2968dce6245f50c7ae9803e1b765ff9ed7705a459c4041f4623a46dea24b9873", - "638f05cce5002f65917125931a07f2541b4fca6819623950f9c306bba18d9ae7", +const std::vector>> Packages = { + { + "0a4b4196394ecf251c532f1552ccf3b3.pkg", + { + "cab6520af0e54b17b46a9ae45611c339e64e50e06f341dd834464acc9689af15", + "31d262620204566d8c3f7bf40f637d6229c2b15b1dd5abee1f784d7b5fba6c97", + "c013887bc3e6e16e4ce84d6c674faea8e70e27b2b0d2864e534f78c88b2be270", + "c9173ac086723d08025380964c38e905a93116eb77ea7d6d3edb24e07bc81d4b", + } + }, + { + "d0112b5fb371db812eb586c3d8d19f4f.pkg", + { + "c32759a871bc14ce2f84381a63dec7895b4376a9d69ef65421a770cae9ab34e4", + "5a2c571f3fec0c83075a97a7f6f8bc52864e9fc2c5576d9db77fd3d25c73950b", + "437510ea732d3d10befc8940cbb2e38777271fdb51e23c5354843f4625a4f99d", + "4355f6960122aac15ee3f069ab2da06783cf4e17a132fef6eac36309d3be0bc7", + "55562fbc475b77283260950ca5810571d27096bc5d5f89388e2736ce7dd21bb3", + "7c2ed35e2ce03c61e199fb7842759605b5443262d6319ce3e1cb71ce28e00bae", + "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "443a3b4d621cbba7429118d82a001e513327d8831a76414e3b47052cdf2888a5", + } + }, }; -const std::string PkgFilename2 = "d0112b5fb371db812eb586c3d8d19f4f.pkg"s; -constexpr const std::uint64_t PackageFileCount2 = 8; - // // PKG data END // diff --git a/tests/tfo/nexon/test_pkgfile.cpp b/tests/tfo/nexon/test_pkgfile.cpp index ce64ee0..dbb75e3 100644 --- a/tests/tfo/nexon/test_pkgfile.cpp +++ b/tests/tfo/nexon/test_pkgfile.cpp @@ -13,36 +13,43 @@ using namespace std::literals::string_view_literals; TEST_CASE("TFO Pkg file can be decrypted and parsed", "[pkgfile]") { - SECTION("Can parse entries") + SECTION("Can parse entries and verify their hashes") { - auto [bWasRead, vFileBuffer] = ReadFileToBuffer(tfo::PkgFilename); - - REQUIRE(bWasRead == true); - REQUIRE(vFileBuffer.empty() == false); - try { - auto pPkgOptions = uc2::PkgFileOptions::Create(); - pPkgOptions->SetTfoPkg(true); + for (auto&& pair : tfo::Packages) + { + auto pPkgFilename = pair.first; + auto iPackageFileCount = pair.second.size(); + auto pPackageFileHashes = pair.second; - auto pPkgFile = uc2::PkgFile::Create( - tfo::PkgFilename, vFileBuffer, tfo::PackageEntryKey, - tfo::PackageFileKey, pPkgOptions.get()); + auto [bWasRead, vFileBuffer] = ReadFileToBuffer(pPkgFilename); - pPkgFile->DecryptHeader(); - pPkgFile->Parse(); + REQUIRE(bWasRead == true); + REQUIRE(vFileBuffer.empty() == false); - REQUIRE(pPkgFile->GetEntries().size() == tfo::PackageFileCount); + auto pPkgOptions = uc2::PkgFileOptions::Create(); + pPkgOptions->SetTfoPkg(true); - std::size_t iCurIndex = 0; - for (auto&& entry : pPkgFile->GetEntries()) - { - fs::path entryPath = entry->GetFilePath(); - auto [fileData, fileDataLen] = entry->DecryptFile(); - REQUIRE(GetDataHash(fileData, fileDataLen) == - tfo::PackageFileHashes[iCurIndex]); + auto pPkgFile = uc2::PkgFile::Create( + pPkgFilename, vFileBuffer, tfo::PackageEntryKey, + tfo::PackageFileKey, pPkgOptions.get()); + + pPkgFile->DecryptHeader(); + pPkgFile->Parse(); + + REQUIRE(pPkgFile->GetEntries().size() == iPackageFileCount); - iCurIndex++; + std::size_t iCurIndex = 0; + for (auto&& entry : pPkgFile->GetEntries()) + { + fs::path entryPath = entry->GetFilePath(); + auto [fileData, fileDataLen] = entry->DecryptFile(); + REQUIRE(GetDataHash(fileData, fileDataLen) == + pPackageFileHashes[iCurIndex]); + + iCurIndex++; + } } } catch (const std::exception& e) @@ -57,7 +64,10 @@ TEST_CASE("TFO Pkg file partially decrypting an entry", "[pkgfile]") { SECTION("Can decrypt 16 bytes of an entry") { - auto [bWasRead, vFileBuffer] = ReadFileToBuffer(tfo::PkgFilename); + auto pPkgFilename = tfo::Packages[0].first; + auto pPackageFileCount = tfo::Packages[0].second.size(); + + auto [bWasRead, vFileBuffer] = ReadFileToBuffer(pPkgFilename); REQUIRE(bWasRead == true); REQUIRE(vFileBuffer.empty() == false); @@ -68,13 +78,13 @@ TEST_CASE("TFO Pkg file partially decrypting an entry", "[pkgfile]") pPkgOptions->SetTfoPkg(true); auto pPkgFile = uc2::PkgFile::Create( - tfo::PkgFilename, vFileBuffer, tfo::PackageEntryKey, + pPkgFilename, vFileBuffer, tfo::PackageEntryKey, tfo::PackageFileKey, pPkgOptions.get()); pPkgFile->DecryptHeader(); pPkgFile->Parse(); - REQUIRE(pPkgFile->GetEntries().size() == tfo::PackageFileCount); + REQUIRE(pPkgFile->GetEntries().size() == pPackageFileCount); constexpr const std::uint64_t iTargetFileLen = 16; @@ -91,7 +101,10 @@ TEST_CASE("TFO Pkg file partially decrypting an entry", "[pkgfile]") } SECTION("Can decrypt 23 bytes of an entry") { - auto [bWasRead, vFileBuffer] = ReadFileToBuffer(tfo::PkgFilename); + auto pPkgFilename = tfo::Packages[0].first; + auto pPackageFileCount = tfo::Packages[0].second.size(); + + auto [bWasRead, vFileBuffer] = ReadFileToBuffer(pPkgFilename); REQUIRE(bWasRead == true); REQUIRE(vFileBuffer.empty() == false); @@ -102,13 +115,13 @@ TEST_CASE("TFO Pkg file partially decrypting an entry", "[pkgfile]") pPkgOptions->SetTfoPkg(true); auto pPkgFile = uc2::PkgFile::Create( - tfo::PkgFilename, vFileBuffer, tfo::PackageEntryKey, + pPkgFilename, vFileBuffer, tfo::PackageEntryKey, tfo::PackageFileKey, pPkgOptions.get()); pPkgFile->DecryptHeader(); pPkgFile->Parse(); - REQUIRE(pPkgFile->GetEntries().size() == tfo::PackageFileCount); + REQUIRE(pPkgFile->GetEntries().size() == pPackageFileCount); constexpr const std::uint64_t iTargetFileLen = 23; constexpr const std::uint64_t iExpectedFileLen = 32; @@ -126,7 +139,10 @@ TEST_CASE("TFO Pkg file partially decrypting an entry", "[pkgfile]") } SECTION("Can decrypt an 8 byte entry") { - auto [bWasRead, vFileBuffer] = ReadFileToBuffer(tfo::PkgFilename2); + auto pPkgFilename = tfo::Packages[1].first; + auto pPackageFileCount = tfo::Packages[1].second.size(); + + auto [bWasRead, vFileBuffer] = ReadFileToBuffer(pPkgFilename); REQUIRE(bWasRead == true); REQUIRE(vFileBuffer.empty() == false); @@ -137,13 +153,13 @@ TEST_CASE("TFO Pkg file partially decrypting an entry", "[pkgfile]") pPkgOptions->SetTfoPkg(true); auto pPkgFile = uc2::PkgFile::Create( - tfo::PkgFilename, vFileBuffer, tfo::PackageEntryKey, + pPkgFilename, vFileBuffer, tfo::PackageEntryKey, tfo::PackageFileKey, pPkgOptions.get()); pPkgFile->DecryptHeader(); pPkgFile->Parse(); - REQUIRE(pPkgFile->GetEntries().size() == tfo::PackageFileCount2); + REQUIRE(pPkgFile->GetEntries().size() == pPackageFileCount); constexpr const std::uint64_t iEncryptedFileLen = 16; constexpr const std::uint64_t iTargetFileLen = 8; @@ -171,7 +187,11 @@ TEST_CASE("TFO Pkg file can be decrypted and parsed using C bindings", { SECTION("Can parse entries") { - auto [bWasRead, vFileBuffer] = ReadFileToBuffer(tfo::PkgFilename); + auto pPkgFilename = tfo::Packages[0].first; + auto pPackageFileCount = tfo::Packages[0].second.size(); + auto pPackageFileHashes = tfo::Packages[0].second; + + auto [bWasRead, vFileBuffer] = ReadFileToBuffer(pPkgFilename); REQUIRE(bWasRead == true); REQUIRE(vFileBuffer.empty() == false); @@ -182,7 +202,7 @@ TEST_CASE("TFO Pkg file can be decrypted and parsed using C bindings", uncso2_PkgFileOptions_SetTfoPkg(pOptions, true); PkgFile_t pPkg = uncso2_PkgFile_Create( - tfo::PkgFilename.data(), vFileBuffer.data(), vFileBuffer.size(), + pPkgFilename.data(), vFileBuffer.data(), vFileBuffer.size(), tfo::PackageEntryKey.data(), tfo::PackageFileKey.data(), pOptions); REQUIRE(pPkg != nullptr); @@ -197,7 +217,7 @@ TEST_CASE("TFO Pkg file can be decrypted and parsed using C bindings", std::uint64_t iEntriesNum = uncso2_PkgFile_GetEntriesNum(pPkg); PkgEntry_t* pEntries = uncso2_PkgFile_GetEntries(pPkg); - REQUIRE(iEntriesNum == tfo::PackageFileCount); + REQUIRE(iEntriesNum == pPackageFileCount); for (std::size_t y = 0; y < iEntriesNum; y++) { @@ -208,7 +228,7 @@ TEST_CASE("TFO Pkg file can be decrypted and parsed using C bindings", REQUIRE(bValidEntry == true); REQUIRE(GetDataHash(reinterpret_cast(pOutBuffer), - iOutBufferSize) == tfo::PackageFileHashes[y]); + iOutBufferSize) == pPackageFileHashes[y]); } uncso2_PkgFile_Free(pPkg); From b93e037a00916ee303ce1e23a1f6b63142ecd735 Mon Sep 17 00:00:00 2001 From: p0358 Date: Sat, 11 Dec 2021 22:52:56 +0100 Subject: [PATCH 03/18] fix missing header and enable CI's artifact upload --- appveyor.yml | 5 +++++ ci/test.ps1 | 2 +- tests/tfo/nexon/test_pkgfile.cpp | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 0857893..f223678 100755 --- a/appveyor.yml +++ b/appveyor.yml @@ -36,5 +36,10 @@ build_script: test_script: - ps: ./ci/test.ps1 +artifacts: + - path: build + name: build + type: zip + #on_finish: # - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) diff --git a/ci/test.ps1 b/ci/test.ps1 index e7c8337..fbf307d 100644 --- a/ci/test.ps1 +++ b/ci/test.ps1 @@ -6,7 +6,7 @@ $isMingwBuild = $curBuildCombo -eq 'windows-mingw' $isMsvcBuild = $curBuildCombo -eq 'windows-msvc' # go to the test binary dir -Push-Location ./build/tests +Push-Location ./build/tests if ($isLinux) { ./pkg_test diff --git a/tests/tfo/nexon/test_pkgfile.cpp b/tests/tfo/nexon/test_pkgfile.cpp index dbb75e3..5c760c9 100644 --- a/tests/tfo/nexon/test_pkgfile.cpp +++ b/tests/tfo/nexon/test_pkgfile.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include From 8020fb535dca2e02d548dae55284a259fb9313e5 Mon Sep 17 00:00:00 2001 From: p0358 Date: Thu, 24 Oct 2024 19:40:51 +0200 Subject: [PATCH 04/18] minimal Qt6 + C++20 port --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 02c7446..4b71ace 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -170,7 +170,7 @@ source_group("Source Files" FILES ${PKG_SOURCES_BASE}) source_group("Public Header Files" FILES ${PKG_PUBLIC_HEADERS_BASE}) source_group("Header Files" FILES ${PKG_HEADERS_BASE}) -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_definitions(-DCMAKE_EXPORT_COMPILE_COMMANDS=ON) @@ -194,7 +194,7 @@ set_target_properties(uncso2 PROPERTIES VERSION ${LIB_VERSION}) # Enable all warnings # if(MSVC) - target_compile_options(uncso2 PRIVATE /W4) + target_compile_options(uncso2 PRIVATE /DWIN32 /D_WINDOWS /W4 /EHsc) else() target_compile_options(uncso2 PRIVATE -Wall -Wextra -pedantic) endif() From 94b3bde70453ae7a101c66adf6df56bd73690eb5 Mon Sep 17 00:00:00 2001 From: p0358 Date: Thu, 24 Oct 2024 19:42:26 +0200 Subject: [PATCH 05/18] fix some warns about unused std::exception variable --- sources/bindings/encryptedfile.cpp | 4 ++-- sources/bindings/lzmatexture.cpp | 6 +++--- sources/bindings/pkgentry.cpp | 12 ++++++------ sources/bindings/pkgfile.cpp | 12 ++++++------ sources/bindings/pkgfileoptions.cpp | 6 +++--- sources/bindings/pkgindex.cpp | 10 +++++----- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/sources/bindings/encryptedfile.cpp b/sources/bindings/encryptedfile.cpp index 5011064..e783514 100755 --- a/sources/bindings/encryptedfile.cpp +++ b/sources/bindings/encryptedfile.cpp @@ -20,7 +20,7 @@ extern "C" keyCollectionView); return reinterpret_cast(newPkg.release()); } - catch (const std::exception& e) + catch (const std::exception&) { return NULL; } @@ -63,7 +63,7 @@ extern "C" return true; } - catch (const std::exception& e) + catch (const std::exception&) { return false; } diff --git a/sources/bindings/lzmatexture.cpp b/sources/bindings/lzmatexture.cpp index 2d618e7..1b06b29 100755 --- a/sources/bindings/lzmatexture.cpp +++ b/sources/bindings/lzmatexture.cpp @@ -13,7 +13,7 @@ extern "C" reinterpret_cast(texBuffer), texSize); return reinterpret_cast(newTex.release()); } - catch (const std::exception& e) + catch (const std::exception&) { return NULL; } @@ -39,7 +39,7 @@ extern "C" { return pTex->GetOriginalSize(); } - catch (const std::exception& e) + catch (const std::exception&) { return 0; } @@ -71,7 +71,7 @@ extern "C" return pTex->Decompress(reinterpret_cast(outBuffer), outBufferSize); } - catch (const std::exception& e) + catch (const std::exception&) { return 0; } diff --git a/sources/bindings/pkgentry.cpp b/sources/bindings/pkgentry.cpp index 74d7283..cace0b0 100755 --- a/sources/bindings/pkgentry.cpp +++ b/sources/bindings/pkgentry.cpp @@ -25,7 +25,7 @@ extern "C" return true; } - catch (const std::exception& e) + catch (const std::exception&) { return false; } @@ -45,7 +45,7 @@ extern "C" { return pEntry->GetFilePath().data(); } - catch (const std::exception& e) + catch (const std::exception&) { return NULL; } @@ -65,7 +65,7 @@ extern "C" { return pEntry->GetPkgFileOffset(); } - catch (const std::exception& e) + catch (const std::exception&) { return 0; } @@ -85,7 +85,7 @@ extern "C" { return pEntry->GetEncryptedSize(); } - catch (const std::exception& e) + catch (const std::exception&) { return 0; } @@ -105,7 +105,7 @@ extern "C" { return pEntry->GetDecryptedSize(); } - catch (const std::exception& e) + catch (const std::exception&) { return 0; } @@ -124,7 +124,7 @@ extern "C" { return pEntry->IsEncrypted(); } - catch (const std::exception& e) + catch (const std::exception&) { return false; } diff --git a/sources/bindings/pkgfile.cpp b/sources/bindings/pkgfile.cpp index 26803f7..4bb530e 100755 --- a/sources/bindings/pkgfile.cpp +++ b/sources/bindings/pkgfile.cpp @@ -20,7 +20,7 @@ extern "C" filename, dataView, szEntryKey, szDataKey, pOptions); return reinterpret_cast(newPkg.release()); } - catch (const std::exception& e) + catch (const std::exception&) { return NULL; } @@ -127,7 +127,7 @@ extern "C" { return pPkg->GetFullHeaderSize(); } - catch (const std::exception& e) + catch (const std::exception&) { return 0; } @@ -147,7 +147,7 @@ extern "C" pPkg->DecryptHeader(); return true; } - catch (const std::exception& e) + catch (const std::exception&) { return false; } @@ -167,7 +167,7 @@ extern "C" pPkg->Parse(); return true; } - catch (const std::exception& e) + catch (const std::exception&) { return false; } @@ -186,7 +186,7 @@ extern "C" { return pPkg->GetEntries().size(); } - catch (const std::exception& e) + catch (const std::exception&) { return 0; } @@ -205,7 +205,7 @@ extern "C" { return reinterpret_cast(pPkg->GetEntries().data()); } - catch (const std::exception& e) + catch (const std::exception&) { return 0; } diff --git a/sources/bindings/pkgfileoptions.cpp b/sources/bindings/pkgfileoptions.cpp index 86d0c7d..c474a7a 100755 --- a/sources/bindings/pkgfileoptions.cpp +++ b/sources/bindings/pkgfileoptions.cpp @@ -11,7 +11,7 @@ extern "C" auto newOptions = uc2::PkgFileOptions::Create(); return reinterpret_cast(newOptions.release()); } - catch (const std::exception& e) + catch (const std::exception&) { return NULL; } @@ -38,7 +38,7 @@ extern "C" { pOptions->SetTfoPkg(state); } - catch (const std::exception& e) + catch (const std::exception&) { return; } @@ -58,7 +58,7 @@ extern "C" { return pOptions->IsTfoPkg(); } - catch (const std::exception& e) + catch (const std::exception&) { return false; } diff --git a/sources/bindings/pkgindex.cpp b/sources/bindings/pkgindex.cpp index 8cd9a55..d4b7077 100755 --- a/sources/bindings/pkgindex.cpp +++ b/sources/bindings/pkgindex.cpp @@ -20,7 +20,7 @@ extern "C" keyCollectionView); return reinterpret_cast(newPkg.release()); } - catch (const std::exception& e) + catch (const std::exception&) { return NULL; } @@ -60,7 +60,7 @@ extern "C" pIndex->ValidateHeader(); return true; } - catch (const std::exception& e) + catch (const std::exception&) { return false; } @@ -80,7 +80,7 @@ extern "C" pIndex->Parse(); return true; } - catch (const std::exception& e) + catch (const std::exception&) { return false; } @@ -100,7 +100,7 @@ extern "C" { return pPkg->GetFilenames().size(); } - catch (const std::exception& e) + catch (const std::exception&) { return 0; } @@ -121,7 +121,7 @@ extern "C" return reinterpret_cast( pPkg->GetFilenames().data()); } - catch (const std::exception& e) + catch (const std::exception&) { return 0; } From 396bbf44325875d5058f63525de1c675ebac8eca Mon Sep 17 00:00:00 2001 From: p0358 Date: Thu, 24 Oct 2024 19:50:23 +0200 Subject: [PATCH 06/18] fix some more warnings --- headers/lzmaDecoder.h | 20 +++++++++++--------- sources/lzmaDecoder.cpp | 23 +++++++++++------------ 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/headers/lzmaDecoder.h b/headers/lzmaDecoder.h index c2ce22d..bbfa105 100644 --- a/headers/lzmaDecoder.h +++ b/headers/lzmaDecoder.h @@ -38,7 +38,7 @@ class CLZMAStream; class CLZMA { public: - static unsigned int Uncompress( unsigned char *pInput, unsigned char *pOutput ); + static size_t Uncompress( unsigned char *pInput, unsigned char *pOutput ); static bool IsCompressed( unsigned char *pInput ); static unsigned int GetActualSize( unsigned char *pInput ); }; @@ -63,9 +63,10 @@ class CLZMAStream // Attempt to read up to nMaxInputBytes from the compressed stream, writing up to nMaxOutputBytes to pOutput. // Makes progress until blocked on input or output. // Returns false if read stops due to an error or if called at EOF (GetExpectedBytesRemaining == 0) - bool Read( unsigned char *pInput, unsigned int nMaxInputBytes, - unsigned char *pOutput, unsigned int nMaxOutputBytes, - /* out */ unsigned int &nCompressedBytesRead, /* out */ unsigned int &nOutputBytesWritten ); + bool Read(unsigned char* pInput, size_t nMaxInputBytes, + unsigned char* pOutput, size_t nMaxOutputBytes, + /* out */ size_t& nCompressedBytesRead, + /* out */ size_t& nOutputBytesWritten); // Get the expected uncompressed bytes yet to be read from this stream. Returns false if not yet known, such as // before being fed the header. @@ -79,7 +80,8 @@ class CLZMAStream eHeaderParse_NeedMoreBytes }; - eHeaderParse TryParseHeader( unsigned char *pInput, unsigned int nBytesAvailable, /* out */ unsigned int &nBytesConsumed ); + eHeaderParse TryParseHeader(unsigned char* pInput, size_t nBytesAvailable, + /* out */ size_t& nBytesConsumed); void FreeDecoderState(); bool CreateDecoderState( const unsigned char *pProperties ); @@ -87,10 +89,10 @@ class CLZMAStream // Init from a zip-embedded LZMA stream. Requires the original size be passed from zip headers. CLzmaDec_t *m_pDecoderState; - unsigned int m_nActualSize; - unsigned int m_nActualBytesRead; - unsigned int m_nCompressedSize; - unsigned int m_nCompressedBytesRead; + size_t m_nActualSize; + size_t m_nActualBytesRead; + size_t m_nCompressedSize; + size_t m_nCompressedBytesRead; // If we have read past the header bool m_bParsedHeader : 1; diff --git a/sources/lzmaDecoder.cpp b/sources/lzmaDecoder.cpp index 1d61932..16a4165 100644 --- a/sources/lzmaDecoder.cpp +++ b/sources/lzmaDecoder.cpp @@ -27,11 +27,11 @@ #include "lzmaDecoder.h" // Allocator to pass to LZMA functions -static void* SzAlloc(ISzAllocPtr p, std::size_t size) +static void* SzAlloc(ISzAllocPtr, std::size_t size) { return malloc(size); } -static void SzFree(ISzAllocPtr p, void* address) +static void SzFree(ISzAllocPtr, void* address) { free(address); } @@ -75,7 +75,7 @@ unsigned int CLZMA::GetActualSize(unsigned char* pInput) // adequate sized output buffer or memory corruption will occur. //----------------------------------------------------------------------------- /* static */ -unsigned int CLZMA::Uncompress(unsigned char* pInput, unsigned char* pOutput) +size_t CLZMA::Uncompress(unsigned char* pInput, unsigned char* pOutput) { lzma_header_t* pHeader = (lzma_header_t*)pInput; if (pHeader->id != LZMA_ID) @@ -161,10 +161,10 @@ bool CLZMAStream::CreateDecoderState(const unsigned char* pProperties) // Attempt to read up to nMaxInputBytes from the compressed stream, writing up // to nMaxOutputBytes to pOutput. Returns false if read stops due to an error. -bool CLZMAStream::Read(unsigned char* pInput, unsigned int nMaxInputBytes, - unsigned char* pOutput, unsigned int nMaxOutputBytes, - /* out */ unsigned int& nCompressedBytesRead, - /* out */ unsigned int& nOutputBytesWritten) +bool CLZMAStream::Read(unsigned char* pInput, size_t nMaxInputBytes, + unsigned char* pOutput, size_t nMaxOutputBytes, + /* out */ size_t& nCompressedBytesRead, + /* out */ size_t& nOutputBytesWritten) { nCompressedBytesRead = 0; nOutputBytesWritten = 0; @@ -173,7 +173,7 @@ bool CLZMAStream::Read(unsigned char* pInput, unsigned int nMaxInputBytes, // Check for initial chunk of data if (!m_bParsedHeader) { - unsigned int nBytesConsumed = 0; + size_t nBytesConsumed = 0; eHeaderParse parseResult = TryParseHeader(pInput, nMaxInputBytes, nBytesConsumed); @@ -280,8 +280,8 @@ void CLZMAStream::InitZIPHeader(unsigned int nCompressedSize, } CLZMAStream::eHeaderParse CLZMAStream::TryParseHeader( - unsigned char* pInput, unsigned int nBytesAvailable, - /* out */ unsigned int& nBytesConsumed) + unsigned char* pInput, size_t nBytesAvailable, + /* out */ size_t& nBytesConsumed) { nBytesConsumed = 0; @@ -316,8 +316,7 @@ CLZMAStream::eHeaderParse CLZMAStream::TryParseHeader( return eHeaderParse_Fail; } - if (nBytesAvailable < - static_cast(nLZMAPropertiesSize) + 4) + if (nBytesAvailable < static_cast(nLZMAPropertiesSize) + 4) { return eHeaderParse_NeedMoreBytes; } From b38a02594c632e2d130c71ff97a069fc6253092e Mon Sep 17 00:00:00 2001 From: p0358 Date: Thu, 24 Oct 2024 21:28:09 +0200 Subject: [PATCH 07/18] switch from gsl::span to std::span --- .gitmodules | 3 --- CMakeLists.txt | 4 +--- README.md | 1 - external/gsl-lite | 1 - headers/ciphers/aescipher.hpp | 4 ++-- headers/ciphers/basecipher.hpp | 6 +++--- headers/ciphers/blowfishcipher.hpp | 4 ++-- headers/ciphers/descipher.hpp | 4 ++-- headers/encryptedfileimpl.hpp | 14 +++++++------- headers/keyhashes.hpp | 5 +++-- headers/lzmatextureimpl.hpp | 8 ++++---- headers/pkg/pkgentryimpl.hpp | 8 ++++---- headers/pkg/pkgfileimpl.hpp | 10 +++++----- headers/pkg/pkgindeximpl.hpp | 16 ++++++++-------- sources/bindings/encryptedfile.cpp | 4 ++-- sources/bindings/pkgfile.cpp | 4 ++-- sources/bindings/pkgindex.cpp | 4 ++-- sources/ciphers/aescipher.cpp | 4 ++-- sources/ciphers/blowfishcipher.cpp | 4 ++-- sources/ciphers/descipher.cpp | 4 ++-- sources/decryptor.cpp | 10 +++++----- sources/encryptedfile.cpp | 13 +++++++------ sources/keyhashes.cpp | 2 +- sources/lzmatexture.cpp | 8 ++++---- sources/pkg/pkgentry.cpp | 6 +++--- sources/pkg/pkgfile.cpp | 6 +++--- sources/pkg/pkgindex.cpp | 12 ++++++------ 27 files changed, 82 insertions(+), 87 deletions(-) delete mode 160000 external/gsl-lite diff --git a/.gitmodules b/.gitmodules index 49b74c0..f0aa8ba 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,6 +7,3 @@ [submodule "external/cryptopp"] path = external/cryptopp url = https://github.com/weidai11/cryptopp -[submodule "external/gsl-lite"] - path = external/gsl-lite - url = https://github.com/martinmoene/gsl-lite diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b71ace..013f282 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,7 +48,6 @@ set(PKG_GENERATED_DIR "${CMAKE_BINARY_DIR}/generated") set(PKG_LIB_CRYPTOPP_DIR "${PKG_LIBS_DIR}/cryptopp") set(PKG_LIB_CRYPTOPP_CMAKE_DIR "${PKG_LIBS_DIR}/cryptopp-cmake") -set(PKG_LIB_GSL_DIR "${PKG_LIBS_DIR}/gsl-lite") set(PKG_LIB_LZMA_DIR "${PKG_LIBS_DIR}/lzma") set_property(GLOBAL PROPERTY USE_FOLDERS ON) @@ -207,8 +206,7 @@ target_include_directories(uncso2 PRIVATE "${PKG_PUBLIC_HEADERS_DIR}") target_include_directories(uncso2 PRIVATE "${LZMA_INCLUDE_DIR}" - "${CryptoPP_INCLUDE_DIRS}" - "${PKG_LIB_GSL_DIR}/include") + "${CryptoPP_INCLUDE_DIRS}") # the generated version header's directory target_include_directories(uncso2 PRIVATE ${PKG_GENERATED_DIR}) diff --git a/README.md b/README.md index d54506a..b63ce37 100644 --- a/README.md +++ b/README.md @@ -204,7 +204,6 @@ libuncso2 uses the following libraries: - [Catch2](https://github.com/catchorg/Catch2) (used in the test application), Boost Software License. - [Crypto++](https://www.cryptopp.com/), Public domain. -- [GSL Lite](https://github.com/martinmoene/gsl-lite), MIT license. - [LZMA SDK](https://www.7-zip.org/sdk.html), Public domain. ## License diff --git a/external/gsl-lite b/external/gsl-lite deleted file mode 160000 index 503b14b..0000000 --- a/external/gsl-lite +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 503b14bdd1cfa9a797dc3dddab6baac7e13504bf diff --git a/headers/ciphers/aescipher.hpp b/headers/ciphers/aescipher.hpp index 70bf37b..0572c90 100644 --- a/headers/ciphers/aescipher.hpp +++ b/headers/ciphers/aescipher.hpp @@ -12,7 +12,7 @@ class CAesCipher : public IBaseCipher virtual void Initialize(std::string_view key, std::string_view iv, bool paddingEnabled = false); - virtual std::uint64_t Decrypt(gsl::span inData, - gsl::span outBuffer); + virtual std::uint64_t Decrypt(std::span inData, + std::span outBuffer); }; } // namespace uc2 diff --git a/headers/ciphers/basecipher.hpp b/headers/ciphers/basecipher.hpp index ef8ba70..46127a5 100644 --- a/headers/ciphers/basecipher.hpp +++ b/headers/ciphers/basecipher.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include namespace uc2 @@ -12,8 +12,8 @@ class IBaseCipher virtual ~IBaseCipher() = default; virtual void Initialize(std::string_view key, std::string_view iv, bool paddingEnabled = false) = 0; - virtual std::uint64_t Decrypt(gsl::span inData, - gsl::span outBuffer) = 0; + virtual std::uint64_t Decrypt(std::span inData, + std::span outBuffer) = 0; protected: std::string_view m_szvKey; diff --git a/headers/ciphers/blowfishcipher.hpp b/headers/ciphers/blowfishcipher.hpp index 180054d..4359952 100644 --- a/headers/ciphers/blowfishcipher.hpp +++ b/headers/ciphers/blowfishcipher.hpp @@ -12,7 +12,7 @@ class CBlowfishCipher : public IBaseCipher virtual void Initialize(std::string_view key, std::string_view iv, bool paddingEnabled = false); - virtual std::uint64_t Decrypt(gsl::span inData, - gsl::span outBuffer); + virtual std::uint64_t Decrypt(std::span inData, + std::span outBuffer); }; } // namespace uc2 diff --git a/headers/ciphers/descipher.hpp b/headers/ciphers/descipher.hpp index f601863..f779120 100644 --- a/headers/ciphers/descipher.hpp +++ b/headers/ciphers/descipher.hpp @@ -12,7 +12,7 @@ class CDesCipher : public IBaseCipher virtual void Initialize(std::string_view key, std::string_view iv, bool paddingEnabled = false); - virtual std::uint64_t Decrypt(gsl::span inData, - gsl::span outBuffer); + virtual std::uint64_t Decrypt(std::span inData, + std::span outBuffer); }; } // namespace uc2 diff --git a/headers/encryptedfileimpl.hpp b/headers/encryptedfileimpl.hpp index 237222d..8794814 100644 --- a/headers/encryptedfileimpl.hpp +++ b/headers/encryptedfileimpl.hpp @@ -2,7 +2,7 @@ #include "encryptedfile.hpp" -#include +#include namespace uc2 { @@ -27,22 +27,22 @@ class EncryptedFileImpl : public EncryptedFile std::vector& fileData, const std::uint8_t (&keyCollection)[4][16]); EncryptedFileImpl(std::string_view fileName, - gsl::span fileDataView, - gsl::span keyCollectionView); + std::span fileDataView, + std::span keyCollectionView); virtual ~EncryptedFileImpl() override; virtual std::pair Decrypt() override; static ptr_t CreateSpan( - std::string_view fileName, gsl::span fileDataView, - gsl::span keyCollectionView); + std::string_view fileName, std::span fileDataView, + std::span keyCollectionView); private: bool IsHeaderValid() const; private: std::string_view m_szvFileName; - gsl::span m_FileDataView; - gsl::span m_KeyCollectionView; + std::span m_FileDataView; + std::span m_KeyCollectionView; }; } // namespace uc2 diff --git a/headers/keyhashes.hpp b/headers/keyhashes.hpp index 55a387b..669b3d5 100755 --- a/headers/keyhashes.hpp +++ b/headers/keyhashes.hpp @@ -1,6 +1,7 @@ #include #include -#include +#include +#include #include #include @@ -8,7 +9,7 @@ namespace uc2 { std::vector GeneratePkgIndexKey( int iKey, std::string_view szPkgName, - gsl::span keyCollectionView); + std::span keyCollectionView); std::string GeneratePkgFileKey(std::string_view szvPkgName, std::string_view szKey); diff --git a/headers/lzmatextureimpl.hpp b/headers/lzmatextureimpl.hpp index 2eeeea6..619cc3b 100644 --- a/headers/lzmatextureimpl.hpp +++ b/headers/lzmatextureimpl.hpp @@ -2,7 +2,7 @@ #include "lzmatexture.hpp" -#include +#include namespace uc2 { @@ -28,7 +28,7 @@ class LzmaTextureImpl : public LzmaTexture { public: LzmaTextureImpl(std::vector& texData); - LzmaTextureImpl(gsl::span texDataView); + LzmaTextureImpl(std::span texDataView); virtual ~LzmaTextureImpl(); virtual std::uint64_t GetOriginalSize() override; @@ -36,9 +36,9 @@ class LzmaTextureImpl : public LzmaTexture virtual bool Decompress(std::uint8_t* outBuffer, std::uint64_t outBufferSize) override; - static bool IsLzmaTextureSpan(gsl::span texData); + static bool IsLzmaTextureSpan(std::span texData); private: - gsl::span m_TexDataView; + std::span m_TexDataView; }; } // namespace uc2 diff --git a/headers/pkg/pkgentryimpl.hpp b/headers/pkg/pkgentryimpl.hpp index bdac7a2..bd49beb 100644 --- a/headers/pkg/pkgentryimpl.hpp +++ b/headers/pkg/pkgentryimpl.hpp @@ -2,7 +2,7 @@ #include "pkgentry.hpp" -#include +#include #include #include @@ -13,7 +13,7 @@ class PkgEntryImpl : public PkgEntry public: PkgEntryImpl(std::string_view filePath, std::uint64_t pkgFileOffset, std::uint64_t encryptedSize, std::uint64_t decryptedSize, - bool isEncrypted, gsl::span fileData, + bool isEncrypted, std::span fileData, std::string_view szvPkgKey = {}); virtual ~PkgEntryImpl() override; @@ -27,7 +27,7 @@ class PkgEntryImpl : public PkgEntry virtual std::uint64_t GetDecryptedSize() override; virtual bool IsEncrypted() override; - void SetDataBufferView(gsl::span newDataView); + void SetDataBufferView(std::span newDataView); void ReleaseDataBufferView(); private: @@ -37,7 +37,7 @@ class PkgEntryImpl : public PkgEntry const std::uint64_t iBytesToDecrypt) const noexcept; private: - gsl::span m_FileDataView; + std::span m_FileDataView; std::string m_szHashedKey; diff --git a/headers/pkg/pkgfileimpl.hpp b/headers/pkg/pkgfileimpl.hpp index b3848de..c163482 100644 --- a/headers/pkg/pkgfileimpl.hpp +++ b/headers/pkg/pkgfileimpl.hpp @@ -2,7 +2,7 @@ #include "pkgfile.hpp" -#include +#include #include #include "pkg/pkgstructures.hpp" @@ -15,7 +15,7 @@ class PkgFileImpl : public PkgFile PkgFileImpl(std::string szFilename, std::vector& fileData, std::string szEntryKey = {}, std::string szDataKey = {}, PkgFileOptions* options = nullptr); - PkgFileImpl(std::string szFilename, gsl::span fileDataView, + PkgFileImpl(std::string szFilename, std::span fileDataView, std::string szEntryKey = {}, std::string szDataKey = {}, PkgFileOptions* pOptions = nullptr); virtual ~PkgFileImpl() override; @@ -27,7 +27,7 @@ class PkgFileImpl : public PkgFile virtual void SetTfoPkg(bool bNewState) override; virtual void SetDataBuffer(std::vector& newFileData) override; - void SetDataBufferSpan(gsl::span newDataBuffer); + void SetDataBufferSpan(std::span newDataBuffer); virtual void ReleaseDataBuffer() override; virtual std::uint64_t GetFullHeaderSize() override; @@ -40,7 +40,7 @@ class PkgFileImpl : public PkgFile virtual std::vector& GetEntries() override; static ptr_t CreateSpan(std::string szFilename, - gsl::span fileDataView = {}, + std::span fileDataView = {}, std::string szEntryKey = {}, std::string szDataKey = {}, PkgFileOptions* pOptions = nullptr); @@ -78,7 +78,7 @@ class PkgFileImpl : public PkgFile std::string m_szMd5Hash; - gsl::span m_FileDataView; + std::span m_FileDataView; std::vector> m_Entries; diff --git a/headers/pkg/pkgindeximpl.hpp b/headers/pkg/pkgindeximpl.hpp index 1845225..620635b 100755 --- a/headers/pkg/pkgindeximpl.hpp +++ b/headers/pkg/pkgindeximpl.hpp @@ -2,7 +2,7 @@ #include "pkgindex.hpp" -#include +#include namespace uc2 { @@ -15,14 +15,14 @@ class PkgIndexImpl : public PkgIndex std::vector& fileData, const std::uint8_t (*keyCollection)[4][16]); PkgIndexImpl(std::string_view indexFilename, - gsl::span fileDataView, - gsl::span keyCollectionView); + std::span fileDataView, + std::span keyCollectionView); virtual ~PkgIndexImpl() override; virtual void SetKeyCollection( const std::uint8_t (*keyCollection)[4][16]) override; void SetKeyCollectionSpan( - gsl::span keyCollectionView); + std::span keyCollectionView); virtual void ValidateHeader() override; @@ -31,13 +31,13 @@ class PkgIndexImpl : public PkgIndex virtual const std::vector& GetFilenames() override; static ptr_t CreateSpan( - std::string_view indexFilename, gsl::span fileDataView, - gsl::span keyCollectionView); + std::string_view indexFilename, std::span fileDataView, + std::span keyCollectionView); private: std::string_view m_szvIndexFilename; - gsl::span m_FileDataView; - gsl::span m_KeyCollectionView; + std::span m_FileDataView; + std::span m_KeyCollectionView; std::vector m_vFilenames; diff --git a/sources/bindings/encryptedfile.cpp b/sources/bindings/encryptedfile.cpp index e783514..77db22f 100755 --- a/sources/bindings/encryptedfile.cpp +++ b/sources/bindings/encryptedfile.cpp @@ -8,10 +8,10 @@ extern "C" const char* filename, void* dataBuffer, uint64_t dataSize, const uint8_t (*keyCollection)[4][16]) { - gsl::span dataView(reinterpret_cast(dataBuffer), + std::span dataView(reinterpret_cast(dataBuffer), dataSize); - gsl::span keyCollectionView(keyCollection, + std::span keyCollectionView(keyCollection, 16 * 4); try diff --git a/sources/bindings/pkgfile.cpp b/sources/bindings/pkgfile.cpp index 4bb530e..82999fb 100755 --- a/sources/bindings/pkgfile.cpp +++ b/sources/bindings/pkgfile.cpp @@ -9,7 +9,7 @@ extern "C" const char* szEntryKey, const char* szDataKey, PkgFileOptions_t options /*= NULL*/) { - gsl::span dataView(reinterpret_cast(dataBuffer), + std::span dataView(reinterpret_cast(dataBuffer), dataSize); auto pOptions = reinterpret_cast(options); @@ -95,7 +95,7 @@ extern "C" auto pPkg = reinterpret_cast(pkgHandle); - gsl::span dataView(reinterpret_cast(dataBuffer), + std::span dataView(reinterpret_cast(dataBuffer), dataSize); pPkg->SetDataBufferSpan(dataView); diff --git a/sources/bindings/pkgindex.cpp b/sources/bindings/pkgindex.cpp index d4b7077..f17dfb9 100755 --- a/sources/bindings/pkgindex.cpp +++ b/sources/bindings/pkgindex.cpp @@ -8,10 +8,10 @@ extern "C" const char* filename, void* dataBuffer, uint64_t dataSize, const uint8_t (*keyCollection)[4][16]) { - gsl::span dataView(reinterpret_cast(dataBuffer), + std::span dataView(reinterpret_cast(dataBuffer), dataSize); - gsl::span keyCollectionView(keyCollection, + std::span keyCollectionView(keyCollection, 16 * 4); try diff --git a/sources/ciphers/aescipher.cpp b/sources/ciphers/aescipher.cpp index 2f65176..14de9ef 100644 --- a/sources/ciphers/aescipher.cpp +++ b/sources/ciphers/aescipher.cpp @@ -18,8 +18,8 @@ void CAesCipher::Initialize(std::string_view key, std::string_view iv, this->m_bPaddingEnabled = paddingEnabled; } -std::uint64_t CAesCipher::Decrypt(gsl::span inData, - gsl::span outBuffer) +std::uint64_t CAesCipher::Decrypt(std::span inData, + std::span outBuffer) { CryptoPP::CBC_Mode::Decryption dec; diff --git a/sources/ciphers/blowfishcipher.cpp b/sources/ciphers/blowfishcipher.cpp index dea5464..527f875 100644 --- a/sources/ciphers/blowfishcipher.cpp +++ b/sources/ciphers/blowfishcipher.cpp @@ -18,8 +18,8 @@ void CBlowfishCipher::Initialize(std::string_view key, std::string_view iv, this->m_bPaddingEnabled = paddingEnabled; } -std::uint64_t CBlowfishCipher::Decrypt(gsl::span inData, - gsl::span outBuffer) +std::uint64_t CBlowfishCipher::Decrypt(std::span inData, + std::span outBuffer) { CryptoPP::CBC_Mode::Decryption dec; diff --git a/sources/ciphers/descipher.cpp b/sources/ciphers/descipher.cpp index 779078d..a3ecb04 100644 --- a/sources/ciphers/descipher.cpp +++ b/sources/ciphers/descipher.cpp @@ -18,8 +18,8 @@ void CDesCipher::Initialize(std::string_view key, std::string_view iv, this->m_bPaddingEnabled = paddingEnabled; } -std::uint64_t CDesCipher::Decrypt(gsl::span inData, - gsl::span outBuffer) +std::uint64_t CDesCipher::Decrypt(std::span inData, + std::span outBuffer) { CryptoPP::CBC_Mode::Decryption dec; diff --git a/sources/decryptor.cpp b/sources/decryptor.cpp index 9c6ae95..0bb0478 100755 --- a/sources/decryptor.cpp +++ b/sources/decryptor.cpp @@ -81,9 +81,9 @@ std::vector CDecryptor::Decrypt( std::size_t CDecryptor::Decrypt(const void* pStart, void* pOutBuffer, const std::size_t iLength) const { - gsl::span inData( + std::span inData( static_cast(pStart), iLength); - gsl::span outData(static_cast(pOutBuffer), + std::span outData(static_cast(pOutBuffer), iLength); return this->m_pCipher->Decrypt(inData, outData); } @@ -91,9 +91,9 @@ std::size_t CDecryptor::Decrypt(const void* pStart, void* pOutBuffer, std::size_t CDecryptor::DecryptInBuffer(void* pBuffer, const std::size_t iLength) const { - gsl::span inData( + std::span inData( static_cast(pBuffer), iLength); - gsl::span outData(static_cast(pBuffer), + std::span outData(static_cast(pBuffer), iLength); return this->m_pCipher->Decrypt(inData, outData); } @@ -103,7 +103,7 @@ std::vector CDecryptor::Decrypt(const void* pStart, { std::vector vOutData(iLength); - gsl::span inData( + std::span inData( static_cast(pStart), iLength); this->m_pCipher->Decrypt(inData, vOutData); diff --git a/sources/encryptedfile.cpp b/sources/encryptedfile.cpp index d314a19..21a8f50 100644 --- a/sources/encryptedfile.cpp +++ b/sources/encryptedfile.cpp @@ -24,12 +24,13 @@ EncryptedFile::ptr_t EncryptedFile::Create( const std::uint64_t iDataSize, const std::uint8_t (&keyCollection)[4][16]) { return EncryptedFileImpl::CreateSpan( - fileName, gsl::span(pData, iDataSize), keyCollection); + fileName, std::span(pData, iDataSize), + { &keyCollection, 1 }); } EncryptedFile::ptr_t EncryptedFileImpl::CreateSpan( - std::string_view fileName, gsl::span fileDataView, - gsl::span keyCollectionView) + std::string_view fileName, std::span fileDataView, + std::span keyCollectionView) { return std::make_unique(fileName, fileDataView, keyCollectionView); @@ -38,7 +39,7 @@ EncryptedFile::ptr_t EncryptedFileImpl::CreateSpan( bool EncryptedFile::IsEncryptedFile(std::uint8_t* pData, const std::uint64_t iDataSize) { - gsl::span dataView(pData, iDataSize); + std::span dataView(pData, iDataSize); if (iDataSize < sizeof(EncryptedFileHeader_t)) { @@ -84,8 +85,8 @@ EncryptedFileImpl::EncryptedFileImpl(std::string_view fileName, } EncryptedFileImpl::EncryptedFileImpl( - std::string_view fileName, gsl::span fileDataView, - gsl::span keyCollectionView) + std::string_view fileName, std::span fileDataView, + std::span keyCollectionView) : m_szvFileName(fileName), m_FileDataView(fileDataView), m_KeyCollectionView(keyCollectionView) { diff --git a/sources/keyhashes.cpp b/sources/keyhashes.cpp index 2aca6af..e6f58a6 100755 --- a/sources/keyhashes.cpp +++ b/sources/keyhashes.cpp @@ -10,7 +10,7 @@ namespace uc2 { std::vector GeneratePkgIndexKey( int iKey, std::string_view szPkgName, - gsl::span keyCollectionView) + std::span keyCollectionView) { constexpr const std::uint32_t iVersion = 2; static_assert(sizeof(iVersion) == 4, "iVersion's size must be 4 bytes"); diff --git a/sources/lzmatexture.cpp b/sources/lzmatexture.cpp index 114bf5c..cba3e98 100644 --- a/sources/lzmatexture.cpp +++ b/sources/lzmatexture.cpp @@ -16,7 +16,7 @@ LzmaTexture::ptr_t LzmaTexture::Create(std::uint8_t* pData, const std::uint64_t iDataSize) { return std::make_unique( - gsl::span(pData, iDataSize)); + std::span(pData, iDataSize)); } LzmaTextureImpl::LzmaTextureImpl(std::vector& texData) @@ -29,7 +29,7 @@ LzmaTextureImpl::LzmaTextureImpl(std::vector& texData) } } -LzmaTextureImpl::LzmaTextureImpl(gsl::span texDataView) +LzmaTextureImpl::LzmaTextureImpl(std::span texDataView) : m_TexDataView(texDataView) { if (LzmaTexture::IsLzmaTexture(this->m_TexDataView.data(), @@ -98,7 +98,7 @@ bool LzmaTextureImpl::Decompress(std::uint8_t* outBuffer, bool LzmaTexture::IsLzmaTexture(std::uint8_t* pData, const std::uint64_t iDataSize) { - gsl::span dataView(pData, iDataSize); + std::span dataView(pData, iDataSize); return LzmaTextureImpl::IsLzmaTextureSpan(dataView); } @@ -107,7 +107,7 @@ std::uint64_t LzmaTexture::GetHeaderSize() return sizeof(LzmaVtfHeader_t); } -bool LzmaTextureImpl::IsLzmaTextureSpan(gsl::span texData) +bool LzmaTextureImpl::IsLzmaTextureSpan(std::span texData) { const std::uint64_t iFileDataSize = texData.size_bytes(); diff --git a/sources/pkg/pkgentry.cpp b/sources/pkg/pkgentry.cpp index 21cb9b9..5b2c078 100755 --- a/sources/pkg/pkgentry.cpp +++ b/sources/pkg/pkgentry.cpp @@ -37,7 +37,7 @@ PkgEntryImpl::PkgEntryImpl(std::string_view szFilePath, std::uint64_t pkgFileOffset, std::uint64_t encryptedSize, std::uint64_t decryptedSize, bool isEncrypted, - gsl::span fileDataView, + std::span fileDataView, std::string_view szvPkgKey /*= {}*/) : m_FileDataView(fileDataView), m_szFilePath(MakeUnixSeparated(szFilePath)), m_iPkgFileOffset(pkgFileOffset), m_iEncryptedSize(encryptedSize), @@ -184,13 +184,13 @@ std::pair PkgEntryImpl::HandlePlainFile( return { pFileStart, iTargetDecDataSize }; } -void PkgEntryImpl::SetDataBufferView(gsl::span newDataView) +void PkgEntryImpl::SetDataBufferView(std::span newDataView) { this->m_FileDataView = newDataView; } void PkgEntryImpl::ReleaseDataBufferView() { - this->m_FileDataView = gsl::span(); + this->m_FileDataView = std::span(); } } // namespace uc2 \ No newline at end of file diff --git a/sources/pkg/pkgfile.cpp b/sources/pkg/pkgfile.cpp index 0eb89b1..18cdd2e 100755 --- a/sources/pkg/pkgfile.cpp +++ b/sources/pkg/pkgfile.cpp @@ -36,7 +36,7 @@ std::uint64_t PkgFile::GetHeaderSize(bool bTfoPkg) } PkgFile::ptr_t PkgFileImpl::CreateSpan(std::string szFilename, - gsl::span fileData, + std::span fileData, std::string szEntryKey /*= {}*/, std::string szDataKey /*= {}*/, PkgFileOptions* pOptions /* = nullptr*/) @@ -58,7 +58,7 @@ PkgFileImpl::PkgFileImpl(std::string szFilename, } PkgFileImpl::PkgFileImpl(std::string szFilename, - gsl::span fileData, + std::span fileData, std::string szEntryKey /*= {}*/, std::string szDataKey /*= {}*/, PkgFileOptions* pOptions /* = nullptr*/) @@ -151,7 +151,7 @@ void PkgFileImpl::SetDataBuffer(std::vector& newFileData) this->UpdateEntriesDataView(); } -void PkgFileImpl::SetDataBufferSpan(gsl::span newDataBuffer) +void PkgFileImpl::SetDataBufferSpan(std::span newDataBuffer) { this->m_FileDataView = newDataBuffer; this->UpdateEntriesDataView(); diff --git a/sources/pkg/pkgindex.cpp b/sources/pkg/pkgindex.cpp index eff8f62..f200128 100755 --- a/sources/pkg/pkgindex.cpp +++ b/sources/pkg/pkgindex.cpp @@ -12,7 +12,7 @@ namespace uc2 constexpr const std::uint16_t SUPPORTED_PKG_VERSION = 2; std::vector SplitTextFileByLine( - gsl::span fileBuffer) + std::span fileBuffer) { constexpr std::string_view szNewLine("\r\n", 2); @@ -46,8 +46,8 @@ PkgIndex::ptr_t PkgIndex::Create( } PkgIndex::ptr_t PkgIndexImpl::CreateSpan( - std::string_view indexFilename, gsl::span fileDataView, - gsl::span keyCollectionView) + std::string_view indexFilename, std::span fileDataView, + std::span keyCollectionView) { return std::make_unique(indexFilename, fileDataView, keyCollectionView); @@ -66,8 +66,8 @@ PkgIndexImpl::PkgIndexImpl(std::string_view indexFilename, } PkgIndexImpl::PkgIndexImpl( - std::string_view indexFilename, gsl::span fileDataView, - gsl::span keyCollectionView) + std::string_view indexFilename, std::span fileDataView, + std::span keyCollectionView) : m_szvIndexFilename(indexFilename), m_FileDataView(fileDataView), m_KeyCollectionView(keyCollectionView), m_bHeaderValidated(false) { @@ -81,7 +81,7 @@ void PkgIndexImpl::SetKeyCollection(const std::uint8_t (*keyCollection)[4][16]) } void PkgIndexImpl::SetKeyCollectionSpan( - gsl::span keyCollectionView) + std::span keyCollectionView) { this->m_KeyCollectionView = keyCollectionView; } From b74dffa55f7938d91360cec3196c4a22d6e46ce1 Mon Sep 17 00:00:00 2001 From: p0358 Date: Thu, 24 Oct 2024 22:29:16 +0200 Subject: [PATCH 08/18] update external libraries --- .gitmodules | 6 ++-- CMakeLists.txt | 54 +++--------------------------- external/catch2 | 2 +- external/cryptopp | 2 +- external/cryptopp-cmake | 2 +- sources/ciphers/aescipher.cpp | 6 ++-- sources/ciphers/blowfishcipher.cpp | 6 ++-- sources/ciphers/descipher.cpp | 6 ++-- sources/keyhashes.cpp | 4 +-- 9 files changed, 22 insertions(+), 66 deletions(-) diff --git a/.gitmodules b/.gitmodules index f0aa8ba..87c5012 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,9 @@ [submodule "external/catch2"] path = external/catch2 url = https://github.com/catchorg/Catch2 -[submodule "external/cryptopp-cmake"] - path = external/cryptopp-cmake - url = https://github.com/noloader/cryptopp-cmake/ [submodule "external/cryptopp"] path = external/cryptopp url = https://github.com/weidai11/cryptopp +[submodule "external/cryptopp-cmake"] + path = external/cryptopp-cmake + url = https://github.com/abdes/cryptopp-cmake.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 013f282..4aa9a71 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,9 +31,6 @@ endif() # option(PKG_BUILD_SHARED "Build libuncso2 as a shared library" ON) option(PKG_BUILD_TESTS "Build tests" ${PKG_IS_STANDALONE}) -option(PKG_DEPS_AS_SHARED_LIBS - "Build libuncso2 dependencies as shared libraries" ON) -option(PKG_USE_CLANG_FSAPI "Use libc++fs when available" OFF) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_modules") @@ -68,29 +65,8 @@ generate_libuc2_version(VERSION_FILE # Dependencies # -# Setup Crypto++'s CMake files -configure_file("${PKG_LIB_CRYPTOPP_CMAKE_DIR}/CMakeLists.txt" - "${PKG_LIB_CRYPTOPP_DIR}/" COPYONLY) -configure_file("${PKG_LIB_CRYPTOPP_CMAKE_DIR}/cryptopp-config.cmake" - "${PKG_LIB_CRYPTOPP_DIR}/" COPYONLY) - -# Disable Crypto++ testing -set(BUILD_TESTING FALSE CACHE BOOL "" FORCE) - -# Only build Crypto++ either static or shared libraries -if(NOT MSVC) - if(PKG_DEPS_AS_SHARED_LIBS) - # set(BUILD_STATIC FALSE CACHE BOOL "" FORCE) - else() - set(BUILD_SHARED FALSE CACHE BOOL "" FORCE) - endif() -else() - # Don't build FIPS DLL - set(BUILD_SHARED FALSE CACHE BOOL "" FORCE) -endif() - -add_subdirectory("${PKG_LIB_CRYPTOPP_DIR}") -set(CryptoPP_INCLUDE_DIRS "${PKG_LIB_CRYPTOPP_DIR}") +add_subdirectory("${PKG_LIB_CRYPTOPP_CMAKE_DIR}") +set(CRYPTOPP_SOURCES "${PKG_LIB_CRYPTOPP_DIR}") # Enable weak namespace for MD5 add_definitions(-DCRYPTOPP_ENABLE_NAMESPACE_WEAK=1) @@ -204,9 +180,8 @@ endif() target_include_directories(uncso2 PRIVATE "headers") target_include_directories(uncso2 PRIVATE "${PKG_PUBLIC_HEADERS_DIR}") -target_include_directories(uncso2 - PRIVATE "${LZMA_INCLUDE_DIR}" - "${CryptoPP_INCLUDE_DIRS}") +target_include_directories(uncso2 PRIVATE "external") +target_include_directories(uncso2 PRIVATE "${LZMA_INCLUDE_DIR}") # the generated version header's directory target_include_directories(uncso2 PRIVATE ${PKG_GENERATED_DIR}) @@ -215,26 +190,7 @@ target_include_directories(uncso2 PRIVATE ${PKG_GENERATED_DIR}) # Setup library directories # -if(PKG_USE_CLANG_FSAPI) - message(STATUS "libuncso2: Using libc++fs") - target_link_libraries(uncso2 c++fs) -elseif(NOT MSVC) - message(STATUS "libuncso2: Using stdlibc++fs") - target_link_libraries(uncso2 stdc++fs) -endif() - -if(NOT MSVC) - if(PKG_DEPS_AS_SHARED_LIBS) - target_link_libraries(uncso2 cryptopp-shared) - else() - target_link_libraries(uncso2 cryptopp-static) - endif() -else() - # Don't use FIPS DLL - target_link_libraries(uncso2 cryptopp-static) -endif() - -target_link_libraries(uncso2 lzma) +target_link_libraries(uncso2 lzma cryptopp) # # Set include directory for dependent projects diff --git a/external/catch2 b/external/catch2 index f0dc4d9..a6ee7e2 160000 --- a/external/catch2 +++ b/external/catch2 @@ -1 +1 @@ -Subproject commit f0dc4d9be078d21ccabcb0798f03c332a153f84f +Subproject commit a6ee7e20cd4011129816df7992c1a9db2ef4b58f diff --git a/external/cryptopp b/external/cryptopp index e16be7a..60f81a7 160000 --- a/external/cryptopp +++ b/external/cryptopp @@ -1 +1 @@ -Subproject commit e16be7a380edba5b0aefaaccaf1717112e8652af +Subproject commit 60f81a77e0c9a0e7ffc1ca1bc438ddfa2e43b78e diff --git a/external/cryptopp-cmake b/external/cryptopp-cmake index 33e33e9..d2b072a 160000 --- a/external/cryptopp-cmake +++ b/external/cryptopp-cmake @@ -1 +1 @@ -Subproject commit 33e33e93a46b6d81f1e877d30a68791943409a10 +Subproject commit d2b072ab65c036f3dca67f4204ad57d66728bf99 diff --git a/sources/ciphers/aescipher.cpp b/sources/ciphers/aescipher.cpp index 14de9ef..e6f65f2 100644 --- a/sources/ciphers/aescipher.cpp +++ b/sources/ciphers/aescipher.cpp @@ -1,8 +1,8 @@ #include "ciphers/aescipher.hpp" -#include -#include -#include +#include +#include +#include namespace uc2 { diff --git a/sources/ciphers/blowfishcipher.cpp b/sources/ciphers/blowfishcipher.cpp index 527f875..6496ffa 100644 --- a/sources/ciphers/blowfishcipher.cpp +++ b/sources/ciphers/blowfishcipher.cpp @@ -1,8 +1,8 @@ #include "ciphers/blowfishcipher.hpp" -#include -#include -#include +#include +#include +#include namespace uc2 { diff --git a/sources/ciphers/descipher.cpp b/sources/ciphers/descipher.cpp index a3ecb04..5d01cf7 100644 --- a/sources/ciphers/descipher.cpp +++ b/sources/ciphers/descipher.cpp @@ -1,8 +1,8 @@ #include "ciphers/descipher.hpp" -#include -#include -#include +#include +#include +#include namespace uc2 { diff --git a/sources/keyhashes.cpp b/sources/keyhashes.cpp index e6f58a6..136d6c8 100755 --- a/sources/keyhashes.cpp +++ b/sources/keyhashes.cpp @@ -3,8 +3,8 @@ #include #include -#include -#include +#include +#include namespace uc2 { From 9e31447b95c420fb6eda1e5802f4cde09ba824a0 Mon Sep 17 00:00:00 2001 From: p0358 Date: Thu, 24 Oct 2024 23:47:58 +0200 Subject: [PATCH 09/18] update readme and test github ci --- .github/workflows/cmake.yml | 84 +++++++++++++++++++++++++++++++++++++ README.md | 16 +++---- ci/build.ps1 | 9 ++-- ci/setup.ps1 | 2 +- ci/test.ps1 | 16 +------ version.txt | 2 +- 6 files changed, 97 insertions(+), 32 deletions(-) create mode 100644 .github/workflows/cmake.yml diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml new file mode 100644 index 0000000..c9d6586 --- /dev/null +++ b/.github/workflows/cmake.yml @@ -0,0 +1,84 @@ +# This starter workflow is for a CMake project running on multiple platforms. There is a different starter workflow if you just want a single platform. +# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-single-platform.yml +name: CMake on multiple platforms + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + build: + runs-on: ${{ matrix.os }} + + strategy: + # Set fail-fast to false to ensure that feedback is delivered for all matrix combinations. Consider changing this to true when your workflow is stable. + fail-fast: false + + # Set up a matrix to run the following 3 configurations: + # 1. + # 2. + # 3. + # + # To add more build types (Release, Debug, RelWithDebInfo, etc.) customize the build_type list. + matrix: + os: [ubuntu-latest, windows-latest] + build_type: [Release] + c_compiler: [gcc, clang, cl] + include: + - os: windows-latest + c_compiler: cl + cpp_compiler: cl + - os: ubuntu-latest + c_compiler: gcc + cpp_compiler: g++ + - os: ubuntu-latest + c_compiler: clang + cpp_compiler: clang++ + exclude: + - os: windows-latest + c_compiler: gcc + - os: windows-latest + c_compiler: clang + - os: ubuntu-latest + c_compiler: cl + + steps: + - uses: actions/checkout@v4 + with: + submodules: 'recursive' + + - name: Set reusable strings + # Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file. + id: strings + shell: bash + run: | + echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" + + - name: Configure CMake + # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. + # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type + run: > + cmake -B ${{ steps.strings.outputs.build-output-dir }} + -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} + -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} + -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} + -S ${{ github.workspace }} + + - name: Build + # Build your program with the given configuration. Note that --config is needed because the default Windows generator is a multi-config generator (Visual Studio generator). + run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: libuncso2 + path: build/ + + - name: Test + #working-directory: ${{ steps.strings.outputs.build-output-dir }} + # Execute tests defined by the CMake configuration. Note that --build-config is needed because the default Windows generator is a multi-config generator (Visual Studio generator). + # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail + #run: ctest --build-config ${{ matrix.build_type }} + run: ./ci/test.ps1 diff --git a/README.md b/README.md index b63ce37..d378a34 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,12 @@ PKG is an encrypted archive file format used in Counter-Strike Online 2 and Tita It's based on the ekey's reversing work of at [XeNTaX's forums](https://forum.xentax.com/viewtopic.php?f=21&t=11117). -Used as the back-end for the GUI program [UnCSO2](https://github.com/L-Leite/UnCSO2). +Used as the back-end for the GUI program [UnCSO2](https://github.com/harmonytf/UnCSO2). Tested on: -- GNU/Linux - GCC 8.3.0 (32 and 64 bits) -- GNU/Linux - Clang 8.0.0 (32 and 64 bits) -- Windows 10 - MSVC 2017 (32 and 64 bits) +- GNU/Linux - GCC 8.3.0 (64 bits) +- GNU/Linux - Clang 8.0.0 (64 bits) +- Windows 10 - MSVC 2022 (64 bits) ## Features @@ -20,10 +20,6 @@ Tested on: - Decrypt '.e*' files, such as files with .etxt, .escv or .ecfg extensions. - Decompress LZMA deflated textures. -## Build status - -[![Build status](https://ci.appveyor.com/api/projects/status/oygibb8s9c3xxdba/branch/master?svg=true)](https://ci.appveyor.com/project/L-Leite/libuncso2/branch/master) - ## Examples Decrypting and parsing a PKG file, then, extract its entries to the disk: @@ -188,8 +184,8 @@ add_subdirectory("libuncso2") file(GLOB SOMEAPP_ALL_SOURCES "main.cpp") -# C++17 is required -set(CMAKE_CXX_STANDARD 17) +# C++20 is required +set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_executable(someapp ${SOMEAPP_ALL_SOURCES}) diff --git a/ci/build.ps1 b/ci/build.ps1 index 68b1f62..8a5679e 100644 --- a/ci/build.ps1 +++ b/ci/build.ps1 @@ -7,7 +7,7 @@ function SetupVsToolsPath { # from https://allen-mack.blogspot.com/2008/03/replace-visual-studio-command-prompt.html # split location to shorten the command - Push-Location 'C:\Program Files (x86)\Microsoft Visual Studio\2017' + Push-Location 'C:\Program Files\Microsoft Visual Studio\2022' Push-Location '.\Community\VC\Auxiliary\Build' cmd /c "vcvars64.bat&set" | @@ -26,8 +26,6 @@ $curConfig = $env:CONFIGURATION $isMsvcBuild = $curBuildCombo -eq 'windows-msvc' -$clangFsOption = 'DPKG_USE_CLANG_FSAPI=OFF'; - Write-Host "Running build script..." Write-Host "Current script build combo is: $curBuildCombo $curConfig" @@ -43,7 +41,6 @@ switch ($curBuildCombo) { "linux-clang" { $targetCompilerCC = 'clang-8' $targetCompilerCXX = 'clang++-8' - $clangFsOption = 'DPKG_USE_CLANG_FSAPI=ON'; break } "windows-mingw" { @@ -54,7 +51,7 @@ switch ($curBuildCombo) { "windows-msvc" { $targetCompilerCC = 'cl' $targetCompilerCXX = 'cl' - # add msvc 17 tools to path + # add msvc tools to path SetupVsToolsPath break } @@ -74,7 +71,7 @@ CreateDirectory ./build Push-Location ./build if ($isMsvcBuild) { - cmake -G "Visual Studio 15 2017" -A "x64" ../ + cmake -G "Visual Studio 17 2022" -A "x64" ../ } else { cmake -G "Ninja" ` diff --git a/ci/setup.ps1 b/ci/setup.ps1 index 05fe474..674fb6f 100644 --- a/ci/setup.ps1 +++ b/ci/setup.ps1 @@ -2,7 +2,7 @@ function SetupVsToolsPath { # from https://allen-mack.blogspot.com/2008/03/replace-visual-studio-command-prompt.html # split location to shorten the command - Push-Location 'C:\Program Files (x86)\Microsoft Visual Studio\2017' + Push-Location 'C:\Program Files\Microsoft Visual Studio\2022' Push-Location '.\Community\VC\Auxiliary\Build' cmd /c "vcvars64.bat&set" | diff --git a/ci/test.ps1 b/ci/test.ps1 index fbf307d..fa546a7 100644 --- a/ci/test.ps1 +++ b/ci/test.ps1 @@ -1,10 +1,5 @@ Write-Host 'Running test script...' -$curBuildCombo = $env:BUILD_COMBO - -$isMingwBuild = $curBuildCombo -eq 'windows-mingw' -$isMsvcBuild = $curBuildCombo -eq 'windows-msvc' - # go to the test binary dir Push-Location ./build/tests @@ -12,15 +7,8 @@ if ($isLinux) { ./pkg_test } elseif ($isWindows) { - if ($isMingwBuild) { - # copy libuncso2 and crypto++ dlls to the tests directory - Copy-Item "..\libuncso2.dll" -Destination ".\" - Copy-Item "..\external\cryptopp\libcryptopp.dll" -Destination ".\" - } - elseif ($isMsvcBuild) { - # copy libuncso2 dll to the tests directory - Copy-Item "..\uncso2.dll" -Destination ".\" - } + # copy libuncso2 dll to the tests directory + Copy-Item "..\uncso2.dll" -Destination ".\" ./pkg_test.exe } diff --git a/version.txt b/version.txt index 314c3d7..867e524 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.1.5 \ No newline at end of file +1.2.0 \ No newline at end of file From fca97212c05fb3d514887920bf0ebb9c4991cb03 Mon Sep 17 00:00:00 2001 From: p0358 Date: Fri, 25 Oct 2024 00:31:14 +0200 Subject: [PATCH 10/18] try to fix tests --- .github/workflows/cmake.yml | 6 +++--- .gitignore | 16 +++++++++++++++- tests/CMakeLists.txt | 20 ++++++++++++-------- tests/cso2/nexon/test_encfile.cpp | 2 +- tests/cso2/nexon/test_lzmatex.cpp | 2 +- tests/cso2/nexon/test_pkgfile.cpp | 2 +- tests/cso2/nexon/test_pkgindex.cpp | 2 +- tests/test_main.cpp | 2 -- tests/tfo/nexon/test_pkgfile.cpp | 2 +- tests/tfo/nexon/test_pkgindex.cpp | 2 +- 10 files changed, 36 insertions(+), 20 deletions(-) delete mode 100644 tests/test_main.cpp diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index c9d6586..2c660ca 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -77,8 +77,8 @@ jobs: path: build/ - name: Test - #working-directory: ${{ steps.strings.outputs.build-output-dir }} + working-directory: ${{ steps.strings.outputs.build-output-dir }}/tests # Execute tests defined by the CMake configuration. Note that --build-config is needed because the default Windows generator is a multi-config generator (Visual Studio generator). # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail - #run: ctest --build-config ${{ matrix.build_type }} - run: ./ci/test.ps1 + run: ctest --build-config ${{ matrix.build_type }} + #run: ./ci/test.ps1 diff --git a/.gitignore b/.gitignore index d296ea2..f806891 100644 --- a/.gitignore +++ b/.gitignore @@ -37,5 +37,19 @@ # Generated documentation /docs -# VSCode configs +# VS Code settings /.vscode +/.cache + +# Visual Studio work directory +/.vs/ +# Visual Studio build directory +/out/ + +# CMake build directory +/build + +# appimage executables +*.AppImage + +/CMakeUserPresets.json diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index fbee469..f01f27f 100755 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -21,7 +21,7 @@ set(PKG_TESTS_TFO_NEXON_SOURCES "tfo/nexon/test_pkgindex.cpp" "tfo/nexon/settings.hpp") -set(PKG_TESTS_SOURCES_BASE "test_main.cpp" "utils.cpp") +set(PKG_TESTS_SOURCES_BASE "utils.cpp") set(PKG_TESTS_HEADERS_BASE "utils.hpp") @@ -45,13 +45,7 @@ target_include_directories(pkg_test target_include_directories(pkg_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) add_subdirectory(${PKG_LIB_CATCH_DIR} catch) -target_link_libraries(pkg_test Catch2::Catch2) - -if(PKG_USE_CLANG_FSAPI) - target_link_libraries(pkg_test c++abi c++fs) -elseif(NOT MSVC) - target_link_libraries(pkg_test stdc++fs) -endif() +target_link_libraries(pkg_test Catch2::Catch2WithMain) target_link_libraries(pkg_test uncso2) @@ -63,3 +57,13 @@ file(GLOB PKG_TEST_REQUIRED_FILES "${CMAKE_CURRENT_SOURCE_DIR}/gamefiles/*") foreach(file ${PKG_TEST_REQUIRED_FILES}) configure_file(${file} "${CMAKE_CURRENT_BINARY_DIR}/" COPYONLY) endforeach() + +add_custom_command( + TARGET pkg_test POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_BINARY_DIR}/../uncso2.dll + ${CMAKE_CURRENT_BINARY_DIR}) + +include(CTest) +include(Catch) +catch_discover_tests(pkg_test) diff --git a/tests/cso2/nexon/test_encfile.cpp b/tests/cso2/nexon/test_encfile.cpp index 28b8695..f6f20f0 100644 --- a/tests/cso2/nexon/test_encfile.cpp +++ b/tests/cso2/nexon/test_encfile.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include diff --git a/tests/cso2/nexon/test_lzmatex.cpp b/tests/cso2/nexon/test_lzmatex.cpp index b3cbe0b..502a6d5 100644 --- a/tests/cso2/nexon/test_lzmatex.cpp +++ b/tests/cso2/nexon/test_lzmatex.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include diff --git a/tests/cso2/nexon/test_pkgfile.cpp b/tests/cso2/nexon/test_pkgfile.cpp index 33d6831..679bd12 100644 --- a/tests/cso2/nexon/test_pkgfile.cpp +++ b/tests/cso2/nexon/test_pkgfile.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include diff --git a/tests/cso2/nexon/test_pkgindex.cpp b/tests/cso2/nexon/test_pkgindex.cpp index b6525c9..1fc7e93 100644 --- a/tests/cso2/nexon/test_pkgindex.cpp +++ b/tests/cso2/nexon/test_pkgindex.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include diff --git a/tests/test_main.cpp b/tests/test_main.cpp deleted file mode 100644 index 4ed06df..0000000 --- a/tests/test_main.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#define CATCH_CONFIG_MAIN -#include diff --git a/tests/tfo/nexon/test_pkgfile.cpp b/tests/tfo/nexon/test_pkgfile.cpp index 5c760c9..324472c 100644 --- a/tests/tfo/nexon/test_pkgfile.cpp +++ b/tests/tfo/nexon/test_pkgfile.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include diff --git a/tests/tfo/nexon/test_pkgindex.cpp b/tests/tfo/nexon/test_pkgindex.cpp index 1a29ce8..3fe86db 100644 --- a/tests/tfo/nexon/test_pkgindex.cpp +++ b/tests/tfo/nexon/test_pkgindex.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include From 89bac1999fc445d641152c5da5e0c47bdcf42f30 Mon Sep 17 00:00:00 2001 From: p0358 Date: Fri, 25 Oct 2024 00:48:17 +0200 Subject: [PATCH 11/18] minor oversight for Linux tests --- tests/CMakeLists.txt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f01f27f..d0c7fed 100755 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -58,11 +58,13 @@ foreach(file ${PKG_TEST_REQUIRED_FILES}) configure_file(${file} "${CMAKE_CURRENT_BINARY_DIR}/" COPYONLY) endforeach() -add_custom_command( - TARGET pkg_test POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_BINARY_DIR}/../uncso2.dll - ${CMAKE_CURRENT_BINARY_DIR}) +if(WIN32) + add_custom_command( + TARGET pkg_test POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_BINARY_DIR}/../uncso2.dll + ${CMAKE_CURRENT_BINARY_DIR}) +endif() include(CTest) include(Catch) From 7afe0d47d2dae0425459a6aee847d95092443680 Mon Sep 17 00:00:00 2001 From: p0358 Date: Fri, 25 Oct 2024 01:07:04 +0200 Subject: [PATCH 12/18] ci: it compiles, but artifacts have to have distinct names... --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 2c660ca..6f0591a 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -73,7 +73,7 @@ jobs: - name: Upload artifacts uses: actions/upload-artifact@v4 with: - name: libuncso2 + name: libuncso2-${{ matrix.c_compiler }}-${{ matrix.os }} path: build/ - name: Test From 53a4a94b472a9b9338687e8ccb09e5df5c3ab4d6 Mon Sep 17 00:00:00 2001 From: p0358 Date: Mon, 6 Oct 2025 21:42:31 +0200 Subject: [PATCH 13/18] cmake: fix cryptopp-cmake not using local cryptopp git submodule sources --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4aa9a71..449a8ca 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,8 +65,8 @@ generate_libuc2_version(VERSION_FILE # Dependencies # -add_subdirectory("${PKG_LIB_CRYPTOPP_CMAKE_DIR}") set(CRYPTOPP_SOURCES "${PKG_LIB_CRYPTOPP_DIR}") +add_subdirectory("${PKG_LIB_CRYPTOPP_CMAKE_DIR}") # Enable weak namespace for MD5 add_definitions(-DCRYPTOPP_ENABLE_NAMESPACE_WEAK=1) From 07681768c5a91d4d957da2176a59585a5a34387b Mon Sep 17 00:00:00 2001 From: p0358 Date: Mon, 6 Oct 2025 21:54:10 +0200 Subject: [PATCH 14/18] cmake: fix cmake_minimum_required --- .github/workflows/cmake.yml | 2 +- CMakeLists.txt | 2 +- external/lzma/CMakeLists.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 6f0591a..fdc48cc 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -24,7 +24,7 @@ jobs: # To add more build types (Release, Debug, RelWithDebInfo, etc.) customize the build_type list. matrix: os: [ubuntu-latest, windows-latest] - build_type: [Release] + build_type: [RelWithDebInfo] c_compiler: [gcc, clang, cl] include: - os: windows-latest diff --git a/CMakeLists.txt b/CMakeLists.txt index 449a8ca..da8a5b6 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.13.0) +cmake_minimum_required(VERSION 3.13) if(POLICY CMP0077) cmake_policy(SET CMP0077 NEW) diff --git a/external/lzma/CMakeLists.txt b/external/lzma/CMakeLists.txt index 0381910..b5c55f9 100644 --- a/external/lzma/CMakeLists.txt +++ b/external/lzma/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.13) project(lzma) From 4dfca8663261bc172ffe980723a576d78ae52d79 Mon Sep 17 00:00:00 2001 From: p0358 Date: Mon, 6 Oct 2025 22:39:17 +0200 Subject: [PATCH 15/18] ci: undo this because MSVC has some problem... --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index fdc48cc..6f0591a 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -24,7 +24,7 @@ jobs: # To add more build types (Release, Debug, RelWithDebInfo, etc.) customize the build_type list. matrix: os: [ubuntu-latest, windows-latest] - build_type: [RelWithDebInfo] + build_type: [Release] c_compiler: [gcc, clang, cl] include: - os: windows-latest From a0ceb0a79b3401b083f647b3d6baac8c830d5527 Mon Sep 17 00:00:00 2001 From: p0358 Date: Sun, 9 Nov 2025 23:36:13 +0100 Subject: [PATCH 16/18] add install config to CMakeLists --- .github/workflows/cmake.yml | 2 +- .gitignore | 6 +++++ CMakeLists.txt | 7 ++++++ PKGBUILD | 40 +++++++++++++++++++++++++++++++++ README.md | 5 +++-- appveyor.yml | 45 ------------------------------------- 6 files changed, 57 insertions(+), 48 deletions(-) create mode 100644 PKGBUILD delete mode 100755 appveyor.yml diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 6f0591a..fdc48cc 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -24,7 +24,7 @@ jobs: # To add more build types (Release, Debug, RelWithDebInfo, etc.) customize the build_type list. matrix: os: [ubuntu-latest, windows-latest] - build_type: [Release] + build_type: [RelWithDebInfo] c_compiler: [gcc, clang, cl] include: - os: windows-latest diff --git a/.gitignore b/.gitignore index f806891..36e158f 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,9 @@ *.AppImage /CMakeUserPresets.json + +# Arch Linux +/.SRCINFO +/src +/pkg +*.tar.zst diff --git a/CMakeLists.txt b/CMakeLists.txt index da8a5b6..b16a85f 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -210,3 +210,10 @@ if(PKG_BUILD_TESTS) message("libuncso2: Building tests") add_subdirectory(tests) endif() + +# +# Installation rules +# + +install(TARGETS uncso2 DESTINATION lib) +install(DIRECTORY ${PKG_PUBLIC_HEADERS_ROOT_DIR}/ DESTINATION include/libuncso2) diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 0000000..7d24d75 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,40 @@ +pkgname=libuncso2 +pkgver=1.2.0 +pkgrel=1 +pkgdesc="Backend for UnCSO2 (binary release)" +arch=(any) +url="https://github.com/harmonytf/libuncso2" +license=(GPL-3.0-only) +makedepends=(cmake) +source=() + +prepare() { + ln -snf "$startdir" "$srcdir" +} + +build() { + cmake -B build -S "$pkgname" \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -Wno-dev + cmake --build build +} + +check() { + # TODO: Currently broken + ctest --test-dir "$pkgname/build" --output-on-failure +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + rm -rf "$pkgdir/usr/bin/cryptest" + rm -rf "$pkgdir/usr/include/cryptopp" + rm -rf "$pkgdir/usr/lib/libcryptopp.a" + rm -rf "$pkgdir/usr/share/cmake" + rm -rf "$pkgdir/usr/share/cryptopp" + rm -rf "$pkgdir/usr/share/pkgconfig/cryptopp.pc" + + rm -rf "$pkgdir/usr/bin" + rm -rf "$pkgdir/usr/share" +} diff --git a/README.md b/README.md index d378a34..a5a9560 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,9 @@ It's based on the ekey's reversing work of at [XeNTaX's forums](https://forum.xe Used as the back-end for the GUI program [UnCSO2](https://github.com/harmonytf/UnCSO2). Tested on: -- GNU/Linux - GCC 8.3.0 (64 bits) -- GNU/Linux - Clang 8.0.0 (64 bits) + +- GNU/Linux - GCC 15.2.1 (64 bits) +- GNU/Linux - Clang 21.1.4 (64 bits) - Windows 10 - MSVC 2022 (64 bits) ## Features diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100755 index f223678..0000000 --- a/appveyor.yml +++ /dev/null @@ -1,45 +0,0 @@ -version: 1.1.5-{build} - -image: - - Visual Studio 2017 - - Ubuntu1604 - -environment: - matrix: - - BUILD_COMBO: windows-mingw - - BUILD_COMBO: windows-msvc - - BUILD_COMBO: linux-gcc - - BUILD_COMBO: linux-clang - -matrix: - exclude: - - image: Visual Studio 2017 - BUILD_COMBO: linux-gcc - - image: Visual Studio 2017 - BUILD_COMBO: linux-clang - - image: Ubuntu1604 - BUILD_COMBO: windows-mingw - - image: Ubuntu1604 - BUILD_COMBO: windows-msvc - - -configuration: - - Debug - - Release - -install: - - ps: ./ci/setup.ps1 - -build_script: - - ps: ./ci/build.ps1 - -test_script: - - ps: ./ci/test.ps1 - -artifacts: - - path: build - name: build - type: zip - -#on_finish: -# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) From 5dd3a97fcbfd14247c6d9f7d76bd18e4fbbacdc5 Mon Sep 17 00:00:00 2001 From: p0358 Date: Sun, 9 Nov 2025 23:53:43 +0100 Subject: [PATCH 17/18] fixes --- .github/workflows/cmake.yml | 2 +- PKGBUILD | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index fdc48cc..6f0591a 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -24,7 +24,7 @@ jobs: # To add more build types (Release, Debug, RelWithDebInfo, etc.) customize the build_type list. matrix: os: [ubuntu-latest, windows-latest] - build_type: [RelWithDebInfo] + build_type: [Release] c_compiler: [gcc, clang, cl] include: - os: windows-latest diff --git a/PKGBUILD b/PKGBUILD index 7d24d75..51241a4 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -7,13 +7,14 @@ url="https://github.com/harmonytf/libuncso2" license=(GPL-3.0-only) makedepends=(cmake) source=() +_sourcedir="$pkgname" prepare() { ln -snf "$startdir" "$srcdir" } build() { - cmake -B build -S "$pkgname" \ + cmake -B build -S "$_sourcedir" \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX=/usr \ -Wno-dev @@ -21,12 +22,12 @@ build() { } check() { - # TODO: Currently broken - ctest --test-dir "$pkgname/build" --output-on-failure + ctest --test-dir "$_sourcedir/build/tests" --build-config RelWithDebInfo --output-on-failure } package() { DESTDIR="$pkgdir" cmake --install build + install -Dm644 "$_sourcedir/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" rm -rf "$pkgdir/usr/bin/cryptest" rm -rf "$pkgdir/usr/include/cryptopp" @@ -36,5 +37,5 @@ package() { rm -rf "$pkgdir/usr/share/pkgconfig/cryptopp.pc" rm -rf "$pkgdir/usr/bin" - rm -rf "$pkgdir/usr/share" + rm -rf "$pkgdir/usr/share/pkgconfig" } From a62e5c1a7f104ffd1bd06035fca1c1368bc4196f Mon Sep 17 00:00:00 2001 From: p0358 Date: Mon, 10 Nov 2025 01:58:45 +0100 Subject: [PATCH 18/18] update readme [skip ci] --- .gitignore | 2 +- PKGBUILD | 2 +- README.md | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 36e158f..0567178 100644 --- a/.gitignore +++ b/.gitignore @@ -49,7 +49,7 @@ # CMake build directory /build -# appimage executables +# AppImage executables *.AppImage /CMakeUserPresets.json diff --git a/PKGBUILD b/PKGBUILD index 51241a4..35e21bd 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,7 +1,7 @@ pkgname=libuncso2 pkgver=1.2.0 pkgrel=1 -pkgdesc="Backend for UnCSO2 (binary release)" +pkgdesc="Backend for UnCSO2" arch=(any) url="https://github.com/harmonytf/libuncso2" license=(GPL-3.0-only) diff --git a/README.md b/README.md index a5a9560..be797df 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ # libuncso2 +[![GitHub License](https://img.shields.io/github/license/harmonytf/libuncso2)](https://raw.githubusercontent.com/harmonytf/libuncso2/master/COPYING) +[![GitHub Release](https://img.shields.io/github/v/release/harmonytf/libuncso2)](https://github.com/harmonytf/libuncso2/releases/latest) +[![AUR Version](https://img.shields.io/aur/version/libuncso2?logo=archlinux)](https://aur.archlinux.org/packages/libuncso2) +[![AUR-BIN Version](https://img.shields.io/aur/version/libuncso2-bin?logo=archlinux&label=aur-bin)](https://aur.archlinux.org/packages/libuncso2-bin) + A library to decrypt and parse PKG files used by Nexon's videogame Counter-Strike Online 2. PKG is an encrypted archive file format used in Counter-Strike Online 2 and Titanfall Online to store the games' file data.