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

Method SendCrypted

Source/Client/NM_Engine/ServerSocketPeer.cpp:219–267  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

217
218
219void 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
270void CNetworkPeer::Destroy()

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