Files
ls-2019-source/extra/LS_TTBot/network/SecurityTCP.cpp
T
2026-11-07 13:30:45 +07:00

109 lines
2.0 KiB
C++

#include "../StdAfx.h"
#include "cryption.h"
#include "SecurityTCP.h"
SecurityTCP::SecurityTCP(void)
{
InitState();
}
SecurityTCP::~SecurityTCP(void)
{
}
void SecurityTCP::InitState()
{
m_SndState.InitState();
m_RcvState.InitState();
}
// Packet CheckSum
void SecurityTCP::EncryptMsg( CPacket &rkPacket )
{
// Check Sum
DWORD dwResult = MakeDigest( (BYTE*)rkPacket.GetBuffer(), rkPacket.GetBufferSize() );
rkPacket.SetCheckSum( dwResult );
// Encryption
BYTE *pSrc;
pSrc = (BYTE*)rkPacket.GetBuffer() + PK_CKSUM_ADDR;
Encrypt( pSrc, rkPacket.GetBufferSize() - PK_CKSUM_ADDR );
}
void SecurityTCP::DecryptMsg( CPacket &rkPacket )
{
// Decryption
BYTE *pSrc;
pSrc = (BYTE*)rkPacket.GetBuffer() + PK_CKSUM_ADDR;
Decrypt( pSrc, rkPacket.GetBufferSize() - PK_CKSUM_ADDR );
}
bool SecurityTCP::IsCheckSum( CPacket &rkPacket )
{
//Decrypt
DecryptMsg( rkPacket );
DWORD dwTemp = rkPacket.GetCheckSum(); //Àӽà ÀúÀå.
rkPacket.SetCheckSum( 0 );
DWORD dwResult = MakeDigest( (BYTE*)rkPacket.GetBuffer(), rkPacket.GetBufferSize() );
rkPacket.SetCheckSum( dwTemp );
// Check Sum
return ( dwResult == rkPacket.GetCheckSum() );
}
// Packet Replay
int SecurityTCP::GetSndState()
{
return m_SndState.GetState();
}
void SecurityTCP::UpdateSndState()
{
m_SndState.UpdateState();
}
int SecurityTCP::GetRcvState()
{
return m_RcvState.GetState();
}
void SecurityTCP::UpdateRcvState()
{
m_RcvState.UpdateState();
}
bool SecurityTCP::CheckState( CPacket &rkPacket )
{
if( GetRcvState() == MAGIC_TOKEN_FSM )
{
m_RcvState.SetState( rkPacket.GetState() );
m_SndState.SetState( rkPacket.GetState() );
UpdateSndState();
}
else
{
if( GetRcvState() != rkPacket.GetState() )
return false;
}
UpdateRcvState();
return true;
}
void SecurityTCP::PrepareMsg( CPacket &rkPacket )
{
rkPacket.SetState( GetSndState() );
EncryptMsg( rkPacket );
UpdateSndState();
}
void SecurityTCP::CompletionMsg( CPacket &rkPacket )
{
}