MCPcopy Create free account
hub / github.com/NoMercy-ac/NoMercy / SendCrypted

Method SendCrypted

Source/Client/NM_Engine/ClientSocketWorker.cpp:237–288  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

235
236
237void 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
291std::size_t CNetworkClient::RecvCryptedPacket(const void* c_lpData, std::size_t uMaxLength)

Callers

nothing calls this directly

Calls 7

EncryptFunction · 0.85
CreateChecksumMethod · 0.80
NetworkMgrInstanceMethod · 0.80
get_dataMethod · 0.45
get_sizeMethod · 0.45
getMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected