93 lines
3.4 KiB
C++
93 lines
3.4 KiB
C++
#pragma once
|
|
|
|
#include <NetworkObject.h>
|
|
#include <CryptManager_4Client.h>
|
|
|
|
class UserSessionMgr;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 패킷 암호화 관련 객체 패키징
|
|
class ClientCryptPack4Packet
|
|
{
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// <FIELDs>
|
|
private: sCLIENT_CRYPT_INFO NODE;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// <METHODs>
|
|
public: ClientCryptPack4Packet() { InitData(); }
|
|
~ClientCryptPack4Packet() { InitData(); }
|
|
|
|
ClientCryptPack4Packet(const ClientCryptPack4Packet& source)
|
|
{ CopyMemory(&NODE, &(source.NODE), sizeof(NODE)); }
|
|
|
|
inline void InitData();
|
|
|
|
inline BOOL IsPacketCrypted() { return NODE.m_bUseCryptography; }
|
|
inline void SetUsePacketCrypt(BOOL bSET);
|
|
|
|
inline ClientSNKey& GetClientSNKey() { return NODE.m_SNKey; }
|
|
inline CryptManagerDeletator& GetCryptManager() { return NODE.m_pCryptManager; }
|
|
inline DWORD& KEY4SNKey() { return NODE.m_dwKey; }
|
|
// About SNKey
|
|
inline void NextRoundSNKey4Send() { NODE.m_SNKey.NextRoundSNKey4Send(); };
|
|
inline void NextRoundSNKey4Recv() { NODE.m_SNKey.NextRoundSNKey4Recv(); };
|
|
inline BYTE GetSendSNKey() { return NODE.m_SNKey.GetSendSNKey(RandomSNKey::SNKEY_BASE); };
|
|
inline BYTE GetSendPairSNKey() { return NODE.m_SNKey.GetSendSNKey(RandomSNKey::SNKEY_PAIR); };
|
|
inline BYTE GetRecvSNKey() { return NODE.m_SNKey.GetRecvSNKey(RandomSNKey::SNKEY_BASE); };
|
|
inline BYTE GetRecvPairSNKey() { return NODE.m_SNKey.GetRecvSNKey(RandomSNKey::SNKEY_PAIR); };
|
|
|
|
void InitCryptInfo(DWORD dwUserKey, BYTE byProtoMajorVer, BYTE byProtoMinorVer);
|
|
// MSG_CG_CRYPTOGRAPHY_KEY 수신시 CryptManager Instance 만들기
|
|
BOOL SetCryptographyInfo(MSG_BASE* pMsg);
|
|
// MSG_CG_CRYPTOGRAPHY_SNK_KEY 수신시 SNK 변환
|
|
BOOL SetCryptographyInfo_SNK(MSG_BASE* pMsg);
|
|
// Get Instance for CLIENT
|
|
inline CryptManager* SetCryptAlgorithmInfo(BYTE byPairSNKey, BYTE* IN cryptInfo, BYTE cryptIdx);
|
|
|
|
//
|
|
inline BOOL Encrypt(BYTE* IN OUT pEncryptMsg, const WORD wSize, BYTE& OUT crc);
|
|
inline BOOL Decrypt(BYTE* IN OUT pEncryptMsg, const WORD wSize, BYTE IN crc);
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 각 Session객체마다 존재하는 패킷 암호화 및 보안관련 패키징
|
|
class ClientSecurePackNode4Session
|
|
{
|
|
public: ClientSecurePackNode4Session() {}
|
|
~ClientSecurePackNode4Session() {}
|
|
|
|
public: inline ClientCryptPack4Packet& SEND_CRYPT_PACKET_INFO() { return m_SendPacketCrypt; }
|
|
inline ClientCryptPack4Packet& RECV_CRYPT_PACKET_INFO() { return m_RecvPacketCrypt; }
|
|
|
|
private: ClientCryptPack4Packet m_SendPacketCrypt;
|
|
ClientCryptPack4Packet m_RecvPacketCrypt;
|
|
};
|
|
|
|
|
|
void ClientCryptPack4Packet::InitData()
|
|
{
|
|
NODE.m_bUseCryptography = FALSE;
|
|
// NODE.m_SNKey
|
|
// (WARNING!!)
|
|
//NODE.m_pCryptManager.Release();
|
|
NODE.m_dwKey = 0;
|
|
}
|
|
|
|
void ClientCryptPack4Packet::SetUsePacketCrypt(BOOL bSET)
|
|
{
|
|
NODE.m_pCryptManager.StartLogic(NODE.m_bUseCryptography = bSET);
|
|
}
|
|
|
|
BOOL ClientCryptPack4Packet::Encrypt(BYTE* IN OUT pEncryptMsg, const WORD wSize, BYTE& OUT rCRC)
|
|
{
|
|
return NODE.m_pCryptManager.Encrypt(pEncryptMsg, wSize, rCRC);
|
|
}
|
|
|
|
BOOL ClientCryptPack4Packet::Decrypt(BYTE* IN OUT pEncryptMsg, const WORD wSize, BYTE IN rCRC)
|
|
{
|
|
return NODE.m_pCryptManager.Decrypt(pEncryptMsg, wSize, rCRC);
|
|
}
|
|
|