forked from LosaDev/ls-2019-source
LosaDev source snapshot 2019
This commit is contained in:
commit
c198676e97
20588 files changed
+8812878
No files matched your search
@@ -0,0 +1,127 @@
|
||||
#include "../StdAfx.h"
|
||||
#include "cryption.h"
|
||||
#include "SecurityUDP.h"
|
||||
|
||||
SecurityUDP::SecurityUDP(void)
|
||||
{
|
||||
m_SndState.InitState();
|
||||
m_RcvState.InitState();
|
||||
|
||||
m_recent_rcv_port = 0;
|
||||
memset(m_recent_rcv_ip, 0, sizeof(m_recent_rcv_ip));
|
||||
m_pre_recent_rcv_port = 0;
|
||||
memset( m_pre_recent_rcv_ip, 0, sizeof(m_pre_recent_rcv_ip) );
|
||||
}
|
||||
|
||||
SecurityUDP::~SecurityUDP(void)
|
||||
{
|
||||
}
|
||||
|
||||
void SecurityUDP::RcvPeerInfo( char *iip, int iPort )
|
||||
{
|
||||
sprintf( m_recent_rcv_ip, iip );
|
||||
m_recent_rcv_port = iPort;
|
||||
}
|
||||
|
||||
// Packet CheckSum
|
||||
void SecurityUDP::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 SecurityUDP::DecryptMsg( CPacket &rkPacket )
|
||||
{
|
||||
// Decryption
|
||||
BYTE *pSrc;
|
||||
pSrc = (BYTE*)rkPacket.GetBuffer() + PK_CKSUM_ADDR;
|
||||
Decrypt( pSrc, rkPacket.GetBufferSize() - PK_CKSUM_ADDR );
|
||||
}
|
||||
|
||||
bool SecurityUDP::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
|
||||
if( dwResult != rkPacket.GetCheckSum() )
|
||||
{
|
||||
//LOG.PrintTimeAndLog( LOG_DEBUG_LEVEL, "SecurityUDP::IsCheckSum Check Sum Fail!! [0x%x](%s:%d)", rkPacket.GetPacketID(), m_recent_rcv_ip, m_recent_rcv_port );
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Packet Replay
|
||||
int SecurityUDP::GetSndState()
|
||||
{
|
||||
return m_SndState.GetState();
|
||||
}
|
||||
|
||||
void SecurityUDP::UpdateSndState()
|
||||
{
|
||||
m_SndState.UpdateState();
|
||||
}
|
||||
|
||||
int SecurityUDP::GetRcvState()
|
||||
{
|
||||
return m_RcvState.GetState();
|
||||
}
|
||||
|
||||
void SecurityUDP::UpdateRcvState()
|
||||
{
|
||||
m_RcvState.UpdateState();
|
||||
}
|
||||
|
||||
bool SecurityUDP::CheckState( CPacket &rkPacket )
|
||||
{
|
||||
if( rkPacket.GetState() != MAGIC_TOKEN_FSM )
|
||||
{
|
||||
if( GetRcvState() == rkPacket.GetState() )
|
||||
{
|
||||
if( !strcmp( m_recent_rcv_ip, m_pre_recent_rcv_ip ) && m_recent_rcv_port == m_pre_recent_rcv_port )
|
||||
{
|
||||
//LOG.PrintTimeAndLog( LOG_DEBUG_LEVEL, "SecurityUDP::CheckState Type:[0x%x] State Not Same %d(%s:%d)",
|
||||
// rkPacket.GetPacketID(), rkPacket.GetState(), m_recent_rcv_ip, m_recent_rcv_port );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
strcpy(m_pre_recent_rcv_ip, m_recent_rcv_ip);
|
||||
m_pre_recent_rcv_port = m_recent_rcv_port;
|
||||
|
||||
m_RcvState.SetState( rkPacket.GetState() );
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void SecurityUDP::PrepareMsg( CPacket &rkPacket )
|
||||
{
|
||||
if( GetSndState() == MAGIC_TOKEN_FSM ) // First
|
||||
m_SndState.SetState( rand() );
|
||||
|
||||
rkPacket.SetCheckSum( 0 );
|
||||
rkPacket.SetState( GetSndState() );
|
||||
|
||||
EncryptMsg( rkPacket );
|
||||
|
||||
UpdateSndState();
|
||||
}
|
||||
|
||||
void SecurityUDP::CompletionMsg( CPacket &rkPacket )
|
||||
{
|
||||
// DecryptMsg( rkPacket );
|
||||
}
|
||||
Reference in new issue
Block a user