Drobna poprawka. Problem z deszyfracją

This commit is contained in:
yanczi 2025-12-22 15:03:19 +01:00
parent e69bfd0e3d
commit 6b0fbed103

View file

@ -197,9 +197,9 @@ void ExtractCargo::ExtractingFilesFromCargo()
cargoFile.seekg(fh.offset);
// Strumieñ wyci¹gaj¹cy
for (uint64_t sc = 0; sc < fh.size; sc += ds::chunk_stream)
if (fh.flag == flag::raw)
{
if (fh.flag == flag::raw)
for (uint64_t sc = 0; sc < fh.size; sc += ds::chunk_stream)
{
const uint32_t streamChunk = std::min(ds::chunk_stream, static_cast<uint32_t>(fh.size - sc));
@ -207,45 +207,45 @@ void ExtractCargo::ExtractingFilesFromCargo()
cargoFile.read(buffer.data(), streamChunk);
file.write(reinterpret_cast<const char*>(buffer.data()), streamChunk);
}
else
}
else
{
uint32_t chunkLen;
uint32_t chunkBeforeSize;
uint32_t chunkLastSize;
cargoFile.read(reinterpret_cast<char*>(&chunkLen), sizeof(chunkLen));
cargoFile.read(reinterpret_cast<char*>(&chunkBeforeSize), sizeof(chunkBeforeSize));
cargoFile.read(reinterpret_cast<char*>(&chunkLastSize), sizeof(chunkLastSize));
std::vector<char> chunksString;
// Dekompresja bloków
for (size_t i = 0; i < chunkLen; ++i)
{
uint32_t chunkLen;
uint32_t chunkBeforeSize;
uint32_t chunkLastSize;
// Pobierz rozmiar chunków przed i po skompresowaniem
uint32_t chunkSize = i < chunkLen - 1 ? chunkBeforeSize : chunkLastSize;
cargoFile.read(reinterpret_cast<char*>(&chunkLen), sizeof(chunkLen));
cargoFile.read(reinterpret_cast<char*>(&chunkBeforeSize), sizeof(chunkBeforeSize));
cargoFile.read(reinterpret_cast<char*>(&chunkLastSize), sizeof(chunkLastSize));
uint32_t chunkZipSize;
cargoFile.read(reinterpret_cast<char*>(&chunkZipSize), sizeof(chunkZipSize));
std::vector<char> chunksString;
// Pobierz blok chunka
std::vector<char> buffer(chunkZipSize);
cargoFile.read(buffer.data(), chunkZipSize);
// Dekompresja bloków
for (size_t i = 0; i < chunkLen; ++i)
std::vector<char> rawBuffer(chunkSize);
if ((fh.flag & flag::zip) == flag::zip)
{
// Pobierz rozmiar chunków przed i po skompresowaniem
uint32_t chunkSize = i < chunkLen - 1 ? chunkBeforeSize : chunkLastSize;
uint32_t chunkZipSize;
cargoFile.read(reinterpret_cast<char*>(&chunkZipSize), sizeof(chunkZipSize));
// Pobierz blok chunka
std::vector<char> buffer(chunkZipSize);
cargoFile.read(buffer.data(), chunkZipSize);
std::vector<char> rawBuffer(chunkSize);
if ((fh.flag & flag::zip) == flag::zip)
{
rawBuffer = (fh.flag & flag::enc) == flag::enc ?
eman.decrypt(cman.decompress(buffer, chunkSize)) :
cman.decompress(buffer, chunkSize);
}
else
{
rawBuffer = eman.decrypt(buffer);
}
file.write(reinterpret_cast<const char*>(rawBuffer.data()), chunkSize);
rawBuffer = (fh.flag & flag::enc) == flag::enc ?
eman.decrypt(cman.decompress(buffer, chunkSize)) :
cman.decompress(buffer, chunkSize);
}
else
{
rawBuffer = eman.decrypt(buffer);
}
file.write(reinterpret_cast<const char*>(rawBuffer.data()), chunkSize);
}
}