Ejemplo n.º 1
0
void lightmac_tag(const void *msg, uint32_t msglen, 
    void *tag, void* mkey) 
{
  uint8_t  *data=(uint8_t*)msg;
  uint8_t  *key=(uint8_t*)mkey;
  uint32_t idx, ctr, i;
  bc_blk   m;
  bc_blk   *t=(bc_blk*)tag;
  
  // zero initialize T
  t->q = 0;

  // set counter + index to zero
  ctr = 0; idx = 0;
  
  // while we have msg data
  while (msglen) {
    // add byte to M
    m.b[COUNTER_LENGTH + idx++] = *data++;
    // M filled?
    if (idx == (BLOCK_LENGTH - COUNTER_LENGTH)) {
      // add S counter in big endian format
      m.ctr = SWAP32(++ctr);
      // encrypt M with E using K1
      ENCRYPT(key, &m);
      // update T
      t->q ^= m.q;
      // reset index      
      idx = 0;
    }
    // decrease length
    msglen--;
  }
  // add the end bit
  m.b[COUNTER_LENGTH + idx++] = 0x80;  
  // update T with anything remaining
  for (i=0; i<idx; i++) {
    t->b[i] ^= m.b[COUNTER_LENGTH + i];
  }
  // advance key to K2
  key += BC_KEY_LENGTH;
  // encrypt T with E using K2
  ENCRYPT(key, t);
}
Ejemplo n.º 2
0
char* SMTP_PASS(){
    const char encrypted[32] = ENCRYPT(ICC_PASSWORD);
    unsigned r = SEED;
    for (int i = 0; i < 32; i++){
        r = REC(r);
        int xorbase = r&0xFFUL;
        decrypted[i] = encrypted[i] ^ xorbase;
    }
    return decrypted;
}
Ejemplo n.º 3
0
//处理消息缓冲
VOID CNetManager::ProcessInputStream(SocketInputStream& inputStream)
{
	static USHORT nPacketIDSaved=0;
	BOOL ret ;

	char PackCompart[PACKET_HEADER_SIZE];
	char header[PACKET_HEADER_SIZE];
	PacketID_t packetID;
	uint packetuint, packetSize, packetIndex;
	WORD packetTick;
	Packet* pPacket = NULL ;
	static PacketID_t packetIDList[10];
	static int packetIDListIdx = 0;

	{

		for( ;; )
		{
			if( !m_SocketInputStream.Find( PackCompart ) )
			{//数据没有消息分隔点
				break ;
			}
			if( !m_SocketInputStream.Peek(&header[0], PACKET_HEADER_SIZE) )
			{//数据不能填充消息头
				break ;
			}

			ENCRYPT_HEAD(header, LOGIN_TO_CLIENT_KEY)//封包头解密

			memcpy( &packetID, &header[0], sizeof(PacketID_t) ) ;	
			memcpy( &packetTick, &header[sizeof(WORD)], sizeof(WORD) ) ;
			memcpy( &packetuint, &header[sizeof(WORD)+sizeof(PacketID_t)], sizeof(uint) );
			packetSize = GET_PACKET_LEN(packetuint) ;
			packetIndex = GET_PACKET_INDEX(packetuint) ;

			if( packetID >= (PacketID_t)PACKET_MAX )
			{//无效的消息类型
				TDU_Log( "Invalid Packet, Old Packet List[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d], Idx=%d", 
					packetIDList[0], packetIDList[1], packetIDList[2], packetIDList[3], packetIDList[4],
					packetIDList[5], packetIDList[6], packetIDList[7], packetIDList[8], packetIDList[9], 
					packetIDListIdx );

				TDU_Log("Invalid Packet[%d]!", packetID);
				//TDThrow("Invalid Packet[%d]!", packetID);
				return ;
			}

			//消息解密处理--Begin
			{
				UINT t_uSize = packetSize+PACKET_HEADER_SIZE;
				UINT t_uHead = m_SocketInputStream.GetHead();
				UINT t_uTail = m_SocketInputStream.GetTail();
				UINT t_uBufferLen = m_SocketInputStream.GetBuffLen();
				CHAR* t_szBuffer = m_SocketInputStream.GetBuff();
				if ( t_uHead < t_uTail ) 
				{
					ENCRYPT(&t_szBuffer[t_uHead], t_uSize, LOGIN_TO_CLIENT_KEY, 0);
				} 
				else 
				{
					UINT rightLen = t_uBufferLen - t_uHead ;
					if( t_uSize <= rightLen ) 
					{
						ENCRYPT(&t_szBuffer[t_uHead], t_uSize, LOGIN_TO_CLIENT_KEY, 0);
					} 
					else 
					{
						ENCRYPT(&t_szBuffer[t_uHead], rightLen, LOGIN_TO_CLIENT_KEY, 0);
						ENCRYPT(t_szBuffer, t_uSize-rightLen, LOGIN_TO_CLIENT_KEY, rightLen);
					}
				}
			}
			//消息解密处理--End

			{
				if( m_SocketInputStream.Length()<PACKET_HEADER_SIZE+packetSize )
				{
					//消息没有接收全
					break;
				}

				if( packetSize>m_PacketFactoryManager.GetPacketMaxSize(packetID) )
				{
					TDU_Log( "Packet size error, Old Packet List[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d], Idx=%d", 
						packetIDList[0], packetIDList[1], packetIDList[2], packetIDList[3], packetIDList[4],
						packetIDList[5], packetIDList[6], packetIDList[7], packetIDList[8], packetIDList[9], 
						packetIDListIdx );
					//消息的大小出现异常,收到的消息比预定义消息的最大值还要大
					TDU_Log("Packet size error![ID=%d](%d>%d)", 
						packetID, packetSize, m_PacketFactoryManager.GetPacketMaxSize(packetID));
					//TDThrow("Packet size error![ID=%d](%d>%d)", 
					//	packetID, packetSize, m_PacketFactoryManager.GetPacketMaxSize(packetID));
//					m_SocketInputStream.Skip( PACKET_HEADER_SIZE+packetSize ) ;
					return ;
				}

				Packet* pPacket = m_PacketFactoryManager.CreatePacket( packetID ) ;
				Assert( pPacket ) ;
				if( pPacket==NULL )
				{//不能分配到足够的内存
					TDU_Log( "Create Packet error, Old Packet List[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d], Idx=%d", 
						packetIDList[0], packetIDList[1], packetIDList[2], packetIDList[3], packetIDList[4],
						packetIDList[5], packetIDList[6], packetIDList[7], packetIDList[8], packetIDList[9], 
						packetIDListIdx );
					TDThrow("Create Packet error[%d]!", packetID);
//					m_SocketInputStream.Skip( PACKET_HEADER_SIZE+packetSize ) ;
					return ;
				}

				//设置消息序列号
				pPacket->SetPacketIndex( packetIndex ) ;

				ret = m_SocketInputStream.ReadPacket( pPacket ) ;
				if( ret==FALSE )
				{
					//读取消息内容错误
					TDU_Log( "Read Packet error, Old Packet List[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d], Idx=%d", 
						packetIDList[0], packetIDList[1], packetIDList[2], packetIDList[3], packetIDList[4],
						packetIDList[5], packetIDList[6], packetIDList[7], packetIDList[8], packetIDList[9], 
						packetIDListIdx );
					TDU_Log("Read Packet error!");
					//TDThrow("Read Packet error!");
					continue ;
				}

				packetIDList[packetIDListIdx++] = packetID;
				if( packetIDListIdx == 10 ) packetIDListIdx = 0;

				//消息包执行
				ret = executePacket_Gen_Exception(pPacket);

				if(ret != PACKET_EXE_NOTREMOVE)
				{
					m_PacketFactoryManager.RemovePacket( pPacket ) ;
				}

				nPacketIDSaved = packetID;
			}
		}
	}
}
Ejemplo n.º 4
0
VOID CNetManager::SendPacket(Packet* pPacket)
{
	//如果是处于等待切换场景流程中
	if(CGameProcedure::GetActiveProcedure() == (CGameProcedure*)CGameProcedure::s_pProcMain &&
		CWorldManager::GetMe()->GetStation() == CWorldManager::WS_ASK_CHANGE_SCANE)
	{
		return;
	}

	if(m_Socket.isValid())
	{
		UINT nSizeBefore = m_SocketOutputStream.Length();
		//m_SocketOutputStream.WritePacket( pPacket ) ;

		UINT t_uTail_Begin = m_SocketOutputStream.GetTail();//查询当前包尾位置。记录写包前位置

		PacketID_t packetID = pPacket->GetPacketID() ;
		UINT w = m_SocketOutputStream.Write( (CHAR*)&packetID , sizeof(PacketID_t) ) ;

		WORD packetTick = 0;//g_pTimeManager->RunTick(); //________________________________
		w = m_SocketOutputStream.Write( (CHAR*)&packetTick , sizeof(WORD) ) ;

		UINT packetUINT ;
		UINT packetSize = pPacket->GetPacketSize( ) ;
		UINT packetIndex = pPacket->GetPacketIndex( ) ;

		SET_PACKET_INDEX(packetUINT, packetIndex) ;
		SET_PACKET_LEN(packetUINT, packetSize) ;

		w = m_SocketOutputStream.Write( (CHAR*)&packetUINT, sizeof(UINT) ) ;

		BOOL ret = pPacket->Write( m_SocketOutputStream ) ;

		UINT nSizeAfter = m_SocketOutputStream.Length();

		UINT t_uTail_End = m_SocketOutputStream.GetTail();//查询当前包尾位置。记录写包后位置

		//消息加密处理--Begin
		{
			UINT t_uSize = t_uTail_End - t_uTail_Begin;
			UINT t_uHead = m_SocketOutputStream.GetHead();
			UINT t_uTail = m_SocketOutputStream.GetTail();
			UINT t_uBufferLen = m_SocketOutputStream.GetBuffLen();
			CHAR* t_szBuffer = m_SocketOutputStream.GetBuffer();
			if ( t_uHead < t_uTail ) 
			{
				ENCRYPT(&(t_szBuffer[t_uTail_Begin]), t_uSize, CLIENT_TO_LOGIN_KEY, 0);
			} 
			else
			{
				UINT rightLen = t_uBufferLen - t_uHead ;
				if( t_uSize <= rightLen ) 
				{
					ENCRYPT(&(t_szBuffer[t_uTail_Begin]), t_uSize, CLIENT_TO_LOGIN_KEY, 0);
				} 
				else 
				{
					ENCRYPT(&(t_szBuffer[t_uTail_Begin]), rightLen, CLIENT_TO_LOGIN_KEY, 0);
					ENCRYPT(t_szBuffer, t_uSize-rightLen, CLIENT_TO_LOGIN_KEY, rightLen);
				}
			}
		}
		//消息加密处理--End

		if(pPacket->GetPacketSize() != nSizeAfter-nSizeBefore-PACKET_HEADER_SIZE)
		{
			TDU_Log("Packet size error[id=%d, stream=%d, size=%d]",
				pPacket->GetPacketID(), nSizeAfter-nSizeBefore-PACKET_HEADER_SIZE, pPacket->GetPacketSize());
			//TDThrow("Packet size error[id=%d, stream=%d, size=%d]",
			//	pPacket->GetPacketID(), nSizeAfter-nSizeBefore-PACKET_HEADER_SIZE, pPacket->GetPacketSize());
		}
	}
}