| 574 | } |
| 575 | |
| 576 | std::size_t CNetworkClient::RecvRSAKeyInfo(const void* data, std::size_t maxlength) |
| 577 | { |
| 578 | if (maxlength < TPacketRsaKeyInfo::size()) |
| 579 | return 0; |
| 580 | |
| 581 | NETWORK_LOG(LL_SYS, "Got rsa info packet!"); |
| 582 | |
| 583 | // Read |
| 584 | auto packet = reinterpret_cast<const TPacketRsaKeyInfo*>(data); |
| 585 | auto pPublicRSAKey = DataBuffer(packet->cryptkey, packet->cryptkeysize); |
| 586 | |
| 587 | m_pRSAClient.set_crypt_key(pPublicRSAKey); |
| 588 | DataBuffer pRsaData(m_pRSAClient.get_crypt_key().get_data(), m_pRSAClient.get_crypt_key().get_size()); |
| 589 | memcpy(&m_pRSAKey, pRsaData.get_data(), NET_CRYPT_KEY_LENGTH); |
| 590 | |
| 591 | // Answer |
| 592 | auto finalizePacket = std::make_shared<TPacketRsaKeyFinalize>(); |
| 593 | |
| 594 | // First arg | Dummy |
| 595 | auto ulRandomDataSize = g_nmApp->FunctionsInstance()->GetRandomInt(8, 16); |
| 596 | auto pFirstDummyData = g_nmApp->FunctionsInstance()->GetRandomData(ulRandomDataSize); |
| 597 | memcpy(finalizePacket->dummyDataFirst, pFirstDummyData, ulRandomDataSize); |
| 598 | |
| 599 | // Second Arg | RSA key |
| 600 | auto szKeyHash = g_nmApp->DirFunctionsInstance()->GetSHA256(pRsaData.get_data(), pRsaData.get_size()); |
| 601 | strcpy(finalizePacket->rsaKeyHash, szKeyHash.c_str()); |
| 602 | |
| 603 | // Third arg | Dummy |
| 604 | auto ulRandomDataSize2 = g_nmApp->FunctionsInstance()->GetRandomInt(12, 24); |
| 605 | auto pLastDummyData = g_nmApp->FunctionsInstance()->GetRandomData(ulRandomDataSize2); |
| 606 | memcpy(finalizePacket->dummyDataLast, pLastDummyData, ulRandomDataSize2); |
| 607 | |
| 608 | // Magic |
| 609 | memcpy(finalizePacket->pMagic, gs_pNetworkMagicValue, sizeof(finalizePacket->pMagic)); |
| 610 | |
| 611 | // Send |
| 612 | SendCrypted(HEADER_CS_RSA_KEY_FINALIZE, finalizePacket.get(), finalizePacket->size()); |
| 613 | |
| 614 | return TPacketRsaKeyInfo::size(); |
| 615 | } |
| 616 | |
| 617 | std::size_t CNetworkClient::RecvEncryptionReadyNotification(const void* data, std::size_t maxlength) |
| 618 | { |
nothing calls this directly
no test coverage detected