Compare commits
6 commits
9593f98ae6
...
f9ea960cf0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f9ea960cf0 | ||
|
|
8896624acc | ||
|
|
aea66dbfd9 | ||
|
|
6b0fbed103 | ||
|
|
e69bfd0e3d | ||
|
|
c733778e2e |
9 changed files with 70 additions and 300 deletions
137
ChunkManager.cpp
137
ChunkManager.cpp
|
|
@ -1,137 +0,0 @@
|
||||||
/*
|
|
||||||
* This file is part of VoidArchiveTool.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2025 Yanczi
|
|
||||||
*
|
|
||||||
* Void Archive Toolis free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "ChunkManager.h"
|
|
||||||
|
|
||||||
ChunkManager::ChunkManager(EncryptionManager& em)
|
|
||||||
:eman(em)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
ChunkManager::~ChunkManager()
|
|
||||||
{ }
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Kompresja blokowa
|
|
||||||
//
|
|
||||||
// Dzielenie vectora na chunki dok³adnie po 128KB
|
|
||||||
// Kompresowanie chunków bez nag³ówka
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
std::vector<char> ChunkManager::chunked(const std::vector<char>& raw, const bool& compress, const bool& encrypt)
|
|
||||||
{
|
|
||||||
//std::vector<BlockSize> blockSizes;
|
|
||||||
|
|
||||||
// Maksymalny rozmiar chunka
|
|
||||||
const size_t maxBlockSize = BLOCK_SIZE;
|
|
||||||
const size_t rawSize = raw.size();
|
|
||||||
|
|
||||||
uint32_t blockLen = 0;
|
|
||||||
uint32_t lastChunkRawSize;
|
|
||||||
std::vector<char> compressedBlocks;
|
|
||||||
for (size_t offset = 0; offset < rawSize; offset += maxBlockSize)
|
|
||||||
{
|
|
||||||
// Rozmiar chunka
|
|
||||||
const size_t chunkSize = std::min(maxBlockSize, rawSize - offset);
|
|
||||||
|
|
||||||
auto begin = raw.begin() + offset;
|
|
||||||
auto end = begin + chunkSize;
|
|
||||||
|
|
||||||
// Skopiuj fragment danych do chunka
|
|
||||||
std::vector<char> chunk(begin, end);
|
|
||||||
|
|
||||||
std::vector<char> outChunk;
|
|
||||||
|
|
||||||
// Przetwórz chunki i przetwórz
|
|
||||||
if (compress)
|
|
||||||
{
|
|
||||||
// Zaszyfruj i skompresuj lub tylko skompresuj
|
|
||||||
outChunk = encrypt ? eman.encrypt(cman.compress(chunk)) : cman.compress(chunk);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Zaszyfruj lub skopiuj
|
|
||||||
outChunk = encrypt ? eman.encrypt(chunk) : std::move(chunk);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t chs = static_cast<uint32_t>(chunk.size());
|
|
||||||
uint32_t zch = static_cast<uint32_t>(outChunk.size());
|
|
||||||
|
|
||||||
//addIntToVector<uint32_t>(compressedBlocks, chs);
|
|
||||||
lastChunkRawSize = chs;
|
|
||||||
addIntToVector<uint32_t>(compressedBlocks, zch);
|
|
||||||
compressedBlocks.insert(compressedBlocks.end(), outChunk.begin(), outChunk.end());
|
|
||||||
|
|
||||||
blockLen++;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<char> zip;
|
|
||||||
// Wstaw liczbê o iloœci bloków do vectora;
|
|
||||||
// Przekonpwertuj usigned int32 na ci¹g znkaów
|
|
||||||
// uint16_t blockLen = blockSizes .size();
|
|
||||||
addIntToVector<uint32_t>(zip, blockLen);
|
|
||||||
addIntToVector<uint32_t>(zip, maxBlockSize);
|
|
||||||
addIntToVector<uint32_t>(zip, lastChunkRawSize);
|
|
||||||
|
|
||||||
// Dodaj skompresowane dane
|
|
||||||
zip.insert(zip.end(), compressedBlocks.begin(), compressedBlocks.end());
|
|
||||||
|
|
||||||
return zip;
|
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Dekompresja blokowa
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
std::vector<char> ChunkManager::dechunked(const std::vector<char>& zip, const bool& compress, const bool& encrypt)
|
|
||||||
{
|
|
||||||
size_t offset = 0;
|
|
||||||
const uint32_t chunkLen = getIntFromVector<uint32_t>(zip, offset);
|
|
||||||
const uint32_t chunkBeforeSize = getIntFromVector<uint32_t>(zip, offset);
|
|
||||||
const uint32_t chunkLastSize = getIntFromVector<uint32_t>(zip, offset);
|
|
||||||
|
|
||||||
std::cout << "Q: " << chunkLen << std::endl;
|
|
||||||
std::cout << "C: " << chunkBeforeSize << std::endl;
|
|
||||||
std::cout << "L: " << chunkBeforeSize << std::endl;
|
|
||||||
|
|
||||||
std::vector<char> chunksString;
|
|
||||||
|
|
||||||
// Dekompresja bloków
|
|
||||||
for (size_t i = 0; i < chunkLen; ++i)
|
|
||||||
{
|
|
||||||
// Pobierz rozmiar chunków przed i po skompresowaniem
|
|
||||||
uint32_t chunkSize = i < chunkLen - 1 ? chunkBeforeSize : chunkLastSize;
|
|
||||||
uint32_t chunkZipSize = getIntFromVector<uint32_t>(zip, offset);
|
|
||||||
|
|
||||||
// Pobierz blok chunka
|
|
||||||
std::vector<char> inChunk(chunkZipSize);
|
|
||||||
std::memcpy(inChunk.data(), zip.data() + offset, chunkZipSize);
|
|
||||||
offset += chunkZipSize;
|
|
||||||
|
|
||||||
// Jeœli flaga encrypt jest aktywna najpierw zdeszyfruj blok
|
|
||||||
std::vector<char> zipChunk = encrypt ? eman.decrypt(inChunk) : std::move(inChunk);
|
|
||||||
|
|
||||||
// Zdeklarój pusty chunk
|
|
||||||
std::vector<char> chunk = compress ? cman.decompress(zipChunk, chunkSize) : std::move(zipChunk);
|
|
||||||
|
|
||||||
// Scal chunki
|
|
||||||
chunksString.insert(chunksString.end(), chunk.begin(), chunk.end());
|
|
||||||
}
|
|
||||||
|
|
||||||
return chunksString;
|
|
||||||
}
|
|
||||||
|
|
@ -1,70 +0,0 @@
|
||||||
/*
|
|
||||||
* This file is part of VoidArchiveTool.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2025 Yanczi
|
|
||||||
*
|
|
||||||
* Void Archive Toolis free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include <cstdint>
|
|
||||||
#include <cstring>
|
|
||||||
#include <stdexcept>
|
|
||||||
#include <algorithm>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#include "EncryptionManager.h"
|
|
||||||
#include "CompressionManager.h"
|
|
||||||
|
|
||||||
#define BLOCK_SIZE 131072 // 128KB
|
|
||||||
|
|
||||||
class ChunkManager
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
ChunkManager(EncryptionManager& em);
|
|
||||||
~ChunkManager();
|
|
||||||
|
|
||||||
// Podzia³ na chunki
|
|
||||||
std::vector<char> chunked(const std::vector<char>&, const bool&, const bool&);
|
|
||||||
|
|
||||||
// Zcalanie chunków
|
|
||||||
std::vector<char> dechunked(const std::vector<char>&, const bool&, const bool&);
|
|
||||||
|
|
||||||
private:
|
|
||||||
EncryptionManager eman;
|
|
||||||
CompressionManager cman;
|
|
||||||
|
|
||||||
// Przekonwertuj zmienn¹ na ci¹g na vector
|
|
||||||
template <typename T>
|
|
||||||
void addIntToVector(std::vector<char>& vec, const T& val)
|
|
||||||
{
|
|
||||||
size_t tmpSize = vec.size();
|
|
||||||
vec.resize(tmpSize + sizeof(val));
|
|
||||||
std::memcpy(vec.data() + tmpSize, &val, sizeof(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pobierz zmienn¹ z vectora
|
|
||||||
template <typename T>
|
|
||||||
T getIntFromVector(const std::vector<char>& vec, size_t& offset)
|
|
||||||
{
|
|
||||||
T tmp{};
|
|
||||||
std::memcpy(&tmp, vec.data() + offset, sizeof(tmp));
|
|
||||||
offset += sizeof(tmp);
|
|
||||||
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
@ -42,7 +42,7 @@ CreateCargo::~CreateCargo() {
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
bool CreateCargo::Create(const std::string& path, const uint8_t& flag)
|
bool CreateCargo::Create(const std::string& path, const uint8_t& flag)
|
||||||
{
|
{
|
||||||
cargoFile = path + "." + signature;
|
cargoFile = path + "." + extension;
|
||||||
catalogPath = path;
|
catalogPath = path;
|
||||||
methodFlags = flag;
|
methodFlags = flag;
|
||||||
|
|
||||||
|
|
@ -241,7 +241,6 @@ std::vector<FilesTable> CreateCargo::ComputingHeadFiles()
|
||||||
// Dodaj do kontenera konfiguracjê chunków
|
// Dodaj do kontenera konfiguracjê chunków
|
||||||
if (file.parameter != flag::raw)
|
if (file.parameter != flag::raw)
|
||||||
{
|
{
|
||||||
std::cout << "CHUNK PARAM" << std::endl;
|
|
||||||
cargo.write(reinterpret_cast<const char*>(&quantity), sizeof(quantity));
|
cargo.write(reinterpret_cast<const char*>(&quantity), sizeof(quantity));
|
||||||
cargo.write(reinterpret_cast<const char*>(&chunkBlockSize), sizeof(chunkBlockSize));
|
cargo.write(reinterpret_cast<const char*>(&chunkBlockSize), sizeof(chunkBlockSize));
|
||||||
cargo.write(reinterpret_cast<const char*>(&lastChunkSize), sizeof(lastChunkSize));
|
cargo.write(reinterpret_cast<const char*>(&lastChunkSize), sizeof(lastChunkSize));
|
||||||
|
|
@ -288,8 +287,7 @@ std::vector<FilesTable> CreateCargo::ComputingHeadFiles()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Zaszyfruj lub skopiuj
|
// Zaszyfruj lub skopiuj
|
||||||
outChunk = (file.parameter & flag::enc) == flag::enc ?
|
outChunk = eman.encrypt(chunk);
|
||||||
eman.encrypt(cman.compress(chunk)) : cman.compress(chunk);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint32_t outSize = outChunk.size();
|
const uint32_t outSize = outChunk.size();
|
||||||
|
|
@ -300,19 +298,11 @@ std::vector<FilesTable> CreateCargo::ComputingHeadFiles()
|
||||||
cargo.write(reinterpret_cast<const char*>(outChunk.data()), outChunk.size());
|
cargo.write(reinterpret_cast<const char*>(outChunk.data()), outChunk.size());
|
||||||
sizeFile += outSize;
|
sizeFile += outSize;
|
||||||
}
|
}
|
||||||
std::cout << "SIZE: " << sizeFile << std::endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
f.close();
|
f.close();
|
||||||
|
|
||||||
//Tworzenie hashu CRC
|
|
||||||
//const uint64_t crc = XXH64(buffer.data(), buffer.size(), 0);
|
|
||||||
|
|
||||||
//Kompresjia
|
|
||||||
//std::vector<char> pakBuffer;
|
|
||||||
//computingBytes(file.parameter, buffer, pakBuffer);
|
|
||||||
|
|
||||||
FilesTable ft;
|
FilesTable ft;
|
||||||
ft.nameFile = path;
|
ft.nameFile = path;
|
||||||
ft.nameLen = path.length();
|
ft.nameLen = path.length();
|
||||||
|
|
@ -321,8 +311,6 @@ std::vector<FilesTable> CreateCargo::ComputingHeadFiles()
|
||||||
ft.flag = file.parameter;
|
ft.flag = file.parameter;
|
||||||
ft.crc = XXH64_digest(xxhState);
|
ft.crc = XXH64_digest(xxhState);
|
||||||
|
|
||||||
//cargo.write(reinterpret_cast<const char*>(pakBuffer.data()), pakBuffer.size());
|
|
||||||
|
|
||||||
filesTable.push_back(ft);
|
filesTable.push_back(ft);
|
||||||
offset += sizeFile;
|
offset += sizeFile;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,6 @@
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
#include "DataStruct.h"
|
#include "DataStruct.h"
|
||||||
#include "ChunkManager.h"
|
|
||||||
#include "EncryptionManager.h"
|
#include "EncryptionManager.h"
|
||||||
#include "CompressionManager.h"
|
#include "CompressionManager.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -64,13 +64,13 @@ namespace fl {
|
||||||
namespace ds
|
namespace ds
|
||||||
{
|
{
|
||||||
// Chunki streamowania
|
// Chunki streamowania
|
||||||
inline constexpr int chunk_stream = 268435456; // 256MB
|
inline constexpr uint32_t chunk_stream = 268435456; // 256MB
|
||||||
|
|
||||||
// Blok chunków
|
// Blok chunków
|
||||||
inline constexpr int block_size = 131072; // 128KB
|
inline constexpr uint32_t block_size = 131072; // 128KB
|
||||||
|
|
||||||
// Maksymalny rozmiar pliku do spakowania
|
// Maksymalny rozmiar pliku do spakowania
|
||||||
inline constexpr int maxFileSize = 8589934592; // 8GB
|
inline constexpr uint64_t maxFileSize = 8589934592; // 8GB
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flagi
|
// Flagi
|
||||||
|
|
|
||||||
119
ExtractCargo.cpp
119
ExtractCargo.cpp
|
|
@ -110,51 +110,6 @@ bool ExtractCargo::CheckCargoFile()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Sprawdzanie sumy kontrolnej
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
bool ExtractCargo::HashValid(const std::vector<char>& data, const uint64_t& crc)
|
|
||||||
{
|
|
||||||
uint64_t actualCrc = XXH64(data.data(), data.size(), 0);
|
|
||||||
|
|
||||||
if (actualCrc != crc)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Magiczna funkcja do dekompresji i deszyfracji danych
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
void ExtractCargo::computingBytes(const std::vector<char>& input, std::vector<char>& output, const uint8_t& flag)
|
|
||||||
{
|
|
||||||
ChunkManager cm(eman);
|
|
||||||
|
|
||||||
std::cout << static_cast<int>(flag) << std::endl;
|
|
||||||
|
|
||||||
switch (flag)
|
|
||||||
{
|
|
||||||
case FILE_FLAG_COMPRESS:
|
|
||||||
output = cm.dechunked(input, true, false);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FILE_FLAG_ENCRYPT:
|
|
||||||
output = cm.dechunked(input, false, true);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FILE_FLAG_ZIPENC:
|
|
||||||
output = cm.dechunked(input, true, true);
|
|
||||||
std::cout << "DENC" << std::endl;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
output = input;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Pobieranie nagłówków plików
|
// Pobieranie nagłówków plików
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
@ -175,9 +130,6 @@ void ExtractCargo::LoadFilesTable()
|
||||||
cargoFile.read(reinterpret_cast<char*>(&fhTmp.crc), sizeof(fhTmp.crc));
|
cargoFile.read(reinterpret_cast<char*>(&fhTmp.crc), sizeof(fhTmp.crc));
|
||||||
cargoFile.read(reinterpret_cast<char*>(&fhTmp.flag), sizeof(fhTmp.flag));
|
cargoFile.read(reinterpret_cast<char*>(&fhTmp.flag), sizeof(fhTmp.flag));
|
||||||
|
|
||||||
std::cout << tablePosition << std::endl;
|
|
||||||
std::cout << "Size: " << fhTmp.size << std::endl;
|
|
||||||
|
|
||||||
filesHeads.push_back(fhTmp);
|
filesHeads.push_back(fhTmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -191,25 +143,76 @@ void ExtractCargo::ExtractingFilesFromCargo()
|
||||||
{
|
{
|
||||||
std::filesystem::path dir = cargoFileName.stem() / fh.nameFile;
|
std::filesystem::path dir = cargoFileName.stem() / fh.nameFile;
|
||||||
CreateDirections(dir);
|
CreateDirections(dir);
|
||||||
|
|
||||||
|
std::cout << dir.string() << std::endl;
|
||||||
|
|
||||||
std::ofstream file(dir, std::ios::binary);
|
std::ofstream file(dir, std::ios::binary);
|
||||||
|
|
||||||
std::cout << fh.size << std::endl;
|
|
||||||
cargoFile.seekg(fh.offset);
|
cargoFile.seekg(fh.offset);
|
||||||
std::vector<char> buffor(fh.size);
|
|
||||||
|
|
||||||
cargoFile.read(buffor.data(), fh.size);
|
XXH64_reset(xxhState, 0);
|
||||||
|
|
||||||
std::vector<char> rawBuffor;
|
// Strumieñ wyci¹gaj¹cy
|
||||||
computingBytes(buffor, rawBuffor, fh.flag);
|
if (fh.flag == flag::raw)
|
||||||
|
|
||||||
if (!HashValid(rawBuffor, fh.crc))
|
|
||||||
{
|
{
|
||||||
std::cerr << fh.nameFile << " Error: Corrupted data integration CRC" << std::endl;
|
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));
|
||||||
|
|
||||||
|
std::vector<char> buffer(streamChunk);
|
||||||
|
cargoFile.read(buffer.data(), streamChunk);
|
||||||
|
XXH64_update(xxhState, buffer.data(), buffer.size());
|
||||||
|
file.write(reinterpret_cast<const char*>(buffer.data()), streamChunk);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
// 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 ?
|
||||||
|
cman.decompress(eman.decrypt(buffer), chunkSize) :
|
||||||
|
cman.decompress(buffer, chunkSize);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rawBuffer = eman.decrypt(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
file.write(reinterpret_cast<const char*>(rawBuffor.data()), rawBuffor.size());
|
XXH64_update(xxhState, rawBuffer.data(), rawBuffer.size());
|
||||||
|
file.write(reinterpret_cast<const char*>(rawBuffer.data()), chunkSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
file.close();
|
file.close();
|
||||||
|
|
||||||
|
if (XXH64_digest(xxhState) != fh.crc)
|
||||||
|
{
|
||||||
|
std::cerr << dir.string() << " Error: Corrupted data integration CRC" << std::endl;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << "Unpacking complete!" << std::endl;
|
std::cout << "Unpacking complete!" << std::endl;
|
||||||
|
|
|
||||||
|
|
@ -28,11 +28,12 @@
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <utility>
|
||||||
#include <xxhash.h>
|
#include <xxhash.h>
|
||||||
|
|
||||||
#include "DataStruct.h"
|
#include "DataStruct.h"
|
||||||
#include "ChunkManager.h"
|
|
||||||
#include "EncryptionManager.h"
|
#include "EncryptionManager.h"
|
||||||
|
#include "CompressionManager.h"
|
||||||
|
|
||||||
class ExtractCargo {
|
class ExtractCargo {
|
||||||
public:
|
public:
|
||||||
|
|
@ -57,7 +58,7 @@ private:
|
||||||
std::ifstream cargoFile;
|
std::ifstream cargoFile;
|
||||||
|
|
||||||
EncryptionManager eman;
|
EncryptionManager eman;
|
||||||
|
CompressionManager cman;
|
||||||
|
|
||||||
// Sprawdzenie poprawnoœci archiwum
|
// Sprawdzenie poprawnoœci archiwum
|
||||||
bool CheckCargoFile();
|
bool CheckCargoFile();
|
||||||
|
|
@ -68,13 +69,7 @@ private:
|
||||||
// Pobieranie nag³ówków plików
|
// Pobieranie nag³ówków plików
|
||||||
void LoadFilesTable();
|
void LoadFilesTable();
|
||||||
|
|
||||||
// Sprawdzanie sumy kontrolnej
|
|
||||||
bool HashValid(const std::vector<char>&, const uint64_t&);
|
|
||||||
|
|
||||||
// Utwórz katalog
|
// Utwórz katalog
|
||||||
void CreateDirections(std::filesystem::path);
|
void CreateDirections(std::filesystem::path);
|
||||||
|
|
||||||
// Magiczna funkcja do dekompresji i deszyfracji danych
|
|
||||||
void computingBytes(const std::vector<char>&, std::vector<char>&, const uint8_t&);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,6 @@
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="ChunkManager.cpp" />
|
|
||||||
<ClCompile Include="CompressionManager.cpp" />
|
<ClCompile Include="CompressionManager.cpp" />
|
||||||
<ClCompile Include="CreateCargo.cpp" />
|
<ClCompile Include="CreateCargo.cpp" />
|
||||||
<ClCompile Include="EncryptionManager.cpp" />
|
<ClCompile Include="EncryptionManager.cpp" />
|
||||||
|
|
@ -141,7 +140,6 @@
|
||||||
<ClCompile Include="voidcmd.cpp" />
|
<ClCompile Include="voidcmd.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="ChunkManager.h" />
|
|
||||||
<ClInclude Include="CompressionManager.h" />
|
<ClInclude Include="CompressionManager.h" />
|
||||||
<ClInclude Include="CreateCargo.h" />
|
<ClInclude Include="CreateCargo.h" />
|
||||||
<ClInclude Include="DataStruct.h" />
|
<ClInclude Include="DataStruct.h" />
|
||||||
|
|
|
||||||
|
|
@ -27,9 +27,6 @@
|
||||||
<ClCompile Include="ViewCargo.cpp">
|
<ClCompile Include="ViewCargo.cpp">
|
||||||
<Filter>Pliki źródłowe</Filter>
|
<Filter>Pliki źródłowe</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="ChunkManager.cpp">
|
|
||||||
<Filter>Pliki źródłowe</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="EncryptionManager.cpp">
|
<ClCompile Include="EncryptionManager.cpp">
|
||||||
<Filter>Pliki źródłowe</Filter>
|
<Filter>Pliki źródłowe</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
@ -50,9 +47,6 @@
|
||||||
<ClInclude Include="DataStruct.h">
|
<ClInclude Include="DataStruct.h">
|
||||||
<Filter>Pliki nagłówkowe</Filter>
|
<Filter>Pliki nagłówkowe</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="ChunkManager.h">
|
|
||||||
<Filter>Pliki nagłówkowe</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="EncryptionManager.h">
|
<ClInclude Include="EncryptionManager.h">
|
||||||
<Filter>Pliki nagłówkowe</Filter>
|
<Filter>Pliki nagłówkowe</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue