forked from metin2/client
Removed Panama & HybridCrypt, added experimental Folder and Zip archive providers
This commit is contained in:
@ -7,7 +7,6 @@
|
||||
|
||||
#include "EterPack.h"
|
||||
#include "Inline.h"
|
||||
#include "EterPackPolicy_CSHybridCrypt.h"
|
||||
|
||||
#pragma warning(push, 3)
|
||||
#include <cryptopp/cryptlib.h>
|
||||
@ -199,16 +198,12 @@ FILE * CEterPack::ms_PackLogFile = NULL;
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
CEterPack::CEterPack() : m_indexCount(0), m_indexData(NULL), m_FragmentSize(0), m_bEncrypted(false), m_bReadOnly(false), m_bDecrypedIV(false)
|
||||
{
|
||||
m_pCSHybridCryptPolicy = new EterPackPolicy_CSHybridCrypt;
|
||||
|
||||
}
|
||||
|
||||
CEterPack::~CEterPack()
|
||||
{
|
||||
Destroy();
|
||||
|
||||
delete m_pCSHybridCryptPolicy;
|
||||
m_pCSHybridCryptPolicy = NULL;
|
||||
}
|
||||
|
||||
void CEterPack::Destroy()
|
||||
@ -229,11 +224,6 @@ void CEterPack::Destroy()
|
||||
memset(m_indexFileName, 0, sizeof(m_indexFileName));
|
||||
}
|
||||
|
||||
const std::string& CEterPack::GetPathName()
|
||||
{
|
||||
return m_stPathName;
|
||||
}
|
||||
|
||||
bool CEterPack::Create(CEterFileDict& rkFileDict, const char * dbname, const char* pathName, bool bReadOnly, const BYTE* iv)
|
||||
{
|
||||
if (iv)
|
||||
@ -242,8 +232,6 @@ bool CEterPack::Create(CEterFileDict& rkFileDict, const char * dbname, const cha
|
||||
m_bDecrypedIV = false;
|
||||
}
|
||||
|
||||
m_stPathName = pathName;
|
||||
|
||||
strncpy(m_dbName, dbname, DBNAME_MAX_LEN);
|
||||
|
||||
strncpy(m_indexFileName, dbname, MAX_PATH);
|
||||
@ -572,40 +560,6 @@ bool CEterPack::Get(CMappedFile& out_file, const char * filename, LPCVOID * data
|
||||
out_file.BindLZObject(zObj);
|
||||
*data = zObj->GetBuffer();
|
||||
}
|
||||
else if (COMPRESSED_TYPE_PANAMA == index->compressed_type)
|
||||
{
|
||||
CLZObject * zObj = new CLZObject;
|
||||
__Decrypt_Panama(filename, static_cast<const BYTE*>(*data), index->data_size, *zObj);
|
||||
out_file.BindLZObjectWithBufferedSize(zObj);
|
||||
*data = zObj->GetBuffer();
|
||||
}
|
||||
else if (COMPRESSED_TYPE_HYBRIDCRYPT == index->compressed_type || COMPRESSED_TYPE_HYBRIDCRYPT_WITHSDB == index->compressed_type)
|
||||
{
|
||||
CLZObject * zObj = new CLZObject;
|
||||
|
||||
if( !m_pCSHybridCryptPolicy->DecryptMemory( std::string(filename), static_cast<const BYTE*>(*data), index->data_size, *zObj) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
out_file.BindLZObjectWithBufferedSize(zObj);
|
||||
if( COMPRESSED_TYPE_HYBRIDCRYPT_WITHSDB == index->compressed_type)
|
||||
{
|
||||
BYTE* pSDBData;
|
||||
int iSDBSize;
|
||||
|
||||
if( !m_pCSHybridCryptPolicy->GetSupplementaryDataBlock( std::string(filename), pSDBData, iSDBSize) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
*data = out_file.AppendDataBlock( pSDBData, iSDBSize );
|
||||
}
|
||||
else
|
||||
{
|
||||
*data = zObj->GetBuffer();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -678,41 +632,6 @@ bool CEterPack::Get2(CMappedFile& out_file, const char * filename, TEterPackInde
|
||||
out_file.BindLZObject(zObj);
|
||||
*data = zObj->GetBuffer();
|
||||
}
|
||||
else if (COMPRESSED_TYPE_PANAMA == index->compressed_type)
|
||||
{
|
||||
CLZObject * zObj = new CLZObject;
|
||||
__Decrypt_Panama(filename, static_cast<const BYTE*>(*data), index->data_size, *zObj);
|
||||
out_file.BindLZObjectWithBufferedSize(zObj);
|
||||
*data = zObj->GetBuffer();
|
||||
}
|
||||
else if (COMPRESSED_TYPE_HYBRIDCRYPT == index->compressed_type || COMPRESSED_TYPE_HYBRIDCRYPT_WITHSDB == index->compressed_type)
|
||||
{
|
||||
CLZObject * zObj = new CLZObject;
|
||||
|
||||
if( !m_pCSHybridCryptPolicy->DecryptMemory( std::string(filename), static_cast<const BYTE*>(*data), index->data_size, *zObj) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
out_file.BindLZObjectWithBufferedSize(zObj);
|
||||
|
||||
if( COMPRESSED_TYPE_HYBRIDCRYPT_WITHSDB == index->compressed_type)
|
||||
{
|
||||
BYTE* pSDBData;
|
||||
int iSDBSize;
|
||||
|
||||
if( !m_pCSHybridCryptPolicy->GetSupplementaryDataBlock( std::string(filename), pSDBData, iSDBSize) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
*data = out_file.AppendDataBlock( pSDBData, iSDBSize );
|
||||
}
|
||||
else
|
||||
{
|
||||
*data = zObj->GetBuffer();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -784,36 +703,6 @@ bool CEterPack::Extract()
|
||||
writeFile.Write(zObj.GetBuffer(), zObj.GetSize());
|
||||
zObj.Clear();
|
||||
}
|
||||
else if (COMPRESSED_TYPE_PANAMA == index->compressed_type)
|
||||
{
|
||||
__Decrypt_Panama(index->filename, (const BYTE *) data + index->data_position, index->data_size, zObj);
|
||||
writeFile.Write(zObj.GetBuffer(), zObj.GetBufferSize());
|
||||
zObj.Clear();
|
||||
}
|
||||
else if (COMPRESSED_TYPE_HYBRIDCRYPT == index->compressed_type || COMPRESSED_TYPE_HYBRIDCRYPT_WITHSDB == index->compressed_type)
|
||||
{
|
||||
if( !m_pCSHybridCryptPolicy->DecryptMemory( std::string(index->filename), (const BYTE *) data + index->data_position, index->data_size, zObj) )
|
||||
return false;
|
||||
|
||||
if( COMPRESSED_TYPE_HYBRIDCRYPT_WITHSDB == index->compressed_type)
|
||||
{
|
||||
dataMapFile.BindLZObjectWithBufferedSize(&zObj);
|
||||
|
||||
BYTE* pSDBData;
|
||||
int iSDBSize;
|
||||
|
||||
if( !m_pCSHybridCryptPolicy->GetSupplementaryDataBlock( std::string(index->filename), pSDBData, iSDBSize) )
|
||||
return false;
|
||||
|
||||
dataMapFile.AppendDataBlock( pSDBData, iSDBSize );
|
||||
writeFile.Write(dataMapFile.AppendDataBlock( pSDBData, iSDBSize ),dataMapFile.Size());
|
||||
}
|
||||
else
|
||||
{
|
||||
writeFile.Write(zObj.GetBuffer(), zObj.GetBufferSize());
|
||||
}
|
||||
zObj.Clear();
|
||||
}
|
||||
else if (COMPRESSED_TYPE_NONE == index->compressed_type)
|
||||
writeFile.Write((const char *) data + index->data_position, index->data_size);
|
||||
|
||||
@ -865,19 +754,6 @@ bool CEterPack::Put(const char * filename, const char * sourceFilename, BYTE pac
|
||||
BYTE* pMappedData = (BYTE*)data;
|
||||
int iMappedDataSize = mapFile.Size();
|
||||
|
||||
if( packType == COMPRESSED_TYPE_HYBRIDCRYPT || packType == COMPRESSED_TYPE_HYBRIDCRYPT_WITHSDB )
|
||||
{
|
||||
m_pCSHybridCryptPolicy->GenerateCryptKey( std::string(filename) );
|
||||
|
||||
if( packType == COMPRESSED_TYPE_HYBRIDCRYPT_WITHSDB )
|
||||
{
|
||||
if( !m_pCSHybridCryptPolicy->GenerateSupplementaryDataBlock( std::string(filename), strRelateMapName, (const BYTE*)data, mapFile.Size(), pMappedData, iMappedDataSize ))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Put(filename, pMappedData, iMappedDataSize, packType);
|
||||
}
|
||||
|
||||
@ -952,26 +828,6 @@ bool CEterPack::Put(const char * filename, LPCVOID data, long len, BYTE packType
|
||||
data = zObj.GetBuffer();
|
||||
len = zObj.GetSize();
|
||||
}
|
||||
else if (packType == COMPRESSED_TYPE_PANAMA)
|
||||
{
|
||||
if (!__Encrypt_Panama(filename, (const BYTE *) data, len, zObj))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
data = zObj.GetBuffer();
|
||||
len = zObj.GetBufferSize();
|
||||
}
|
||||
else if (packType == COMPRESSED_TYPE_HYBRIDCRYPT || packType == COMPRESSED_TYPE_HYBRIDCRYPT_WITHSDB )
|
||||
{
|
||||
if( !m_pCSHybridCryptPolicy->EncryptMemory( std::string(filename), (const BYTE *)data, len, zObj ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
data = zObj.GetBuffer();
|
||||
len = zObj.GetBufferSize();
|
||||
}
|
||||
|
||||
|
||||
#ifdef CHECKSUM_CHECK_MD5
|
||||
@ -1503,11 +1359,6 @@ bool CEterPack::__Decrypt_Panama(const char* filename, const BYTE* data, SIZE_T
|
||||
return true;
|
||||
}
|
||||
|
||||
EterPackPolicy_CSHybridCrypt* CEterPack::GetPackPolicy_HybridCrypt() const
|
||||
{
|
||||
return m_pCSHybridCryptPolicy;
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////
|
||||
|
||||
|
Reference in New Issue
Block a user