| 235 | |
| 236 | |
| 237 | void CNetworkClient::SendCrypted(std::uint32_t ulPacketID, void* pData, std::size_t ulSize) |
| 238 | { |
| 239 | if (IsConnected() == false) |
| 240 | return; |
| 241 | |
| 242 | NETWORK_LOG(LL_SYS, "Original data: %p-%u Packet: %u", pData, ulSize, ulPacketID); |
| 243 | |
| 244 | // Process packet security contents |
| 245 | auto pPacketMagic = (*(uint32_t*)gs_pNetworkMagicValue); |
| 246 | (*(uint32_t*)((uint32_t)pData)) = pPacketMagic; |
| 247 | |
| 248 | NETWORK_LOG(LL_SYS, "Magic: %p", pPacketMagic); |
| 249 | |
| 250 | auto pPacketSum = g_nmApp->NetworkMgrInstance()->CreateChecksum(pData, ulSize - (NET_CHECKSUM_LENGTH /* hash */ + NET_CHECKSUM_LENGTH /* sum */)); |
| 251 | (*(uint32_t*)((uint32_t)pData + ulSize - (NET_CHECKSUM_LENGTH /* hash */ + NET_CHECKSUM_LENGTH /* sum */))) = pPacketSum; |
| 252 | |
| 253 | NETWORK_LOG(LL_SYS, "Sum: %p", pPacketSum); |
| 254 | |
| 255 | auto pPacketHash = XXH32(pData, ulSize - NET_CHECKSUM_LENGTH, NET_PACKET_HASH_MAGIC); |
| 256 | (*(uint32_t*)((uint32_t)pData + ulSize - NET_CHECKSUM_LENGTH)) = pPacketHash; |
| 257 | |
| 258 | NETWORK_LOG(LL_SYS, "Hash: %p", pPacketHash); |
| 259 | |
| 260 | |
| 261 | if (m_bRSACompleted || m_bPreCryptCompleted) |
| 262 | { |
| 263 | // Crypt packet content |
| 264 | auto cryptedPacket = NAES256::Encrypt(reinterpret_cast<const uint8_t *>(pData), ulSize, m_bRSACompleted ? m_pRSAKey : m_pPreCryptKey); |
| 265 | NETWORK_LOG(LL_SYS, "Crpyted data: %p-%u", cryptedPacket.get_data(), cryptedPacket.get_size()); |
| 266 | |
| 267 | auto cryptedPacketData = std::make_unique<TCryptedPacket>(); |
| 268 | if (IS_VALID_SMART_PTR(cryptedPacketData)) |
| 269 | { |
| 270 | memcpy(cryptedPacketData->pContext, cryptedPacket.get_data(), cryptedPacket.get_size()); |
| 271 | |
| 272 | cryptedPacketData->uiDecryptedPacketId = ulPacketID; |
| 273 | cryptedPacketData->ulCryptedSize = cryptedPacket.get_size(); |
| 274 | cryptedPacketData->ulDecryptedSize = ulSize; |
| 275 | cryptedPacketData->ulCryptedSum = XXH32(cryptedPacket.get_data(), cryptedPacket.get_size(), NET_PACKET_HASH_MAGIC); |
| 276 | cryptedPacketData->ulDecryptedSum = XXH32(pData, ulSize - (NET_CHECKSUM_LENGTH /* hash */ + NET_CHECKSUM_LENGTH /* sum */), NET_PACKET_HASH_MAGIC); |
| 277 | |
| 278 | NETWORK_LOG(LL_SYS, "Built crpyted packet! Data: %p Size: %u Container size: %u", cryptedPacketData.get(), cryptedPacket.get_size(), cryptedPacketData->size()); |
| 279 | |
| 280 | Send(cryptedPacketData.get(), cryptedPacketData->size()); |
| 281 | } |
| 282 | } |
| 283 | else |
| 284 | { |
| 285 | Send(pData, ulSize); |
| 286 | return; |
| 287 | } |
| 288 | } |
| 289 | |
| 290 | |
| 291 | std::size_t CNetworkClient::RecvCryptedPacket(const void* c_lpData, std::size_t uMaxLength) |
nothing calls this directly
no test coverage detected