| 217 | |
| 218 | |
| 219 | void CNetworkPeer::SendCrypted(std::uint32_t ulPacketID, void* pData, std::size_t ulSize) |
| 220 | { |
| 221 | NETWORK_LOG(LL_SYS, "Original data: %p-%u", pData, ulSize); |
| 222 | |
| 223 | // Process packet security contents |
| 224 | auto pPacketMagic = (*(uint32_t*)gs_pNetworkMagicValue); |
| 225 | (*(uint32_t*)((uint32_t)pData)) = pPacketMagic; |
| 226 | |
| 227 | NETWORK_LOG(LL_SYS, "Magic: %p", pPacketMagic); |
| 228 | |
| 229 | auto pPacketSum = g_nmApp->NetworkMgrInstance()->CreateChecksum(pData, ulSize - (NET_CHECKSUM_LENGTH /* hash */ + NET_CHECKSUM_LENGTH /* sum */)); |
| 230 | (*(uint32_t*)((uint32_t)pData + ulSize - (NET_CHECKSUM_LENGTH /* hash */ + NET_CHECKSUM_LENGTH /* sum */))) = pPacketSum; |
| 231 | |
| 232 | NETWORK_LOG(LL_SYS, "Sum: %p", pPacketSum); |
| 233 | |
| 234 | auto pPacketHash = XXH32(pData, ulSize - NET_CHECKSUM_LENGTH, NET_PACKET_HASH_MAGIC); |
| 235 | (*(uint32_t*)((uint32_t)pData + ulSize - NET_CHECKSUM_LENGTH)) = pPacketHash; |
| 236 | |
| 237 | NETWORK_LOG(LL_SYS, "Hash: %p", pPacketHash); |
| 238 | |
| 239 | |
| 240 | if (m_bRSACryptKeyCompleted || m_bPreCryptCompleted) |
| 241 | { |
| 242 | // Crypt packet content |
| 243 | auto cryptedPacket = NAES256::Encrypt(reinterpret_cast<const uint8_t *>(pData), ulSize, m_bRSACryptKeyCompleted ? m_pRSACryptKey : m_pPreCryptKey); |
| 244 | NETWORK_LOG(LL_SYS, "Crpyted data: %p-%u", cryptedPacket.get_data(), cryptedPacket.get_size()); |
| 245 | |
| 246 | auto cryptedPacketData = std::make_unique<TCryptedPacket>(); |
| 247 | if (IS_VALID_SMART_PTR(cryptedPacketData)) |
| 248 | { |
| 249 | memcpy(cryptedPacketData->pContext, cryptedPacket.get_data(), cryptedPacket.get_size()); |
| 250 | |
| 251 | cryptedPacketData->uiDecryptedPacketId = ulPacketID; |
| 252 | cryptedPacketData->ulCryptedSize = cryptedPacket.get_size(); |
| 253 | cryptedPacketData->ulDecryptedSize = ulSize; |
| 254 | cryptedPacketData->ulCryptedSum = XXH32(cryptedPacket.get_data(), cryptedPacket.get_size(), NET_PACKET_HASH_MAGIC); |
| 255 | cryptedPacketData->ulDecryptedSum = XXH32(pData, ulSize - (NET_CHECKSUM_LENGTH /* hash */ + NET_CHECKSUM_LENGTH /* sum */), NET_PACKET_HASH_MAGIC); |
| 256 | |
| 257 | NETWORK_LOG(LL_SYS, "Built crpyted packet! Data: %p Size: %u Container size: %u", cryptedPacketData.get(), cryptedPacket.get_size(), cryptedPacketData->size()); |
| 258 | |
| 259 | Send(cryptedPacketData.get(), cryptedPacketData->size()); |
| 260 | } |
| 261 | } |
| 262 | else |
| 263 | { |
| 264 | Send(pData, ulSize); |
| 265 | return; |
| 266 | } |
| 267 | } |
| 268 | |
| 269 | |
| 270 | void CNetworkPeer::Destroy() |
nothing calls this directly
no test coverage detected