Files
Sun1602/Tools/WiseClient/Sessions/ServerSession.PacketCrypt.h
2022-10-26 12:25:11 +08:00

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);
}