#pragma once #include #include class UserSessionMgr; ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // ÆÐŶ ¾Ïȣȭ °ü·Ã °´Ã¼ ÆÐŰ¡ class ClientCryptPack4Packet { ////////////////////////////////////////////////////////////////////////// // private: sCLIENT_CRYPT_INFO NODE; ////////////////////////////////////////////////////////////////////////// // 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); }