Advertisement
Guest User

Response

a guest
Jan 11th, 2015
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.93 KB | None | 0 0
  1. bool cConnection::HandleClientLoginEncryptionKeyResponse(void)
  2. {
  3. HANDLE_CLIENT_PACKET_READ(ReadBEShort, short, SharedSecretLength);
  4. AString SharedSecret;
  5. if (!m_ClientBuffer.ReadString(SharedSecret, SharedSecretLength))
  6. {
  7. return false;
  8. }
  9. HANDLE_CLIENT_PACKET_READ(ReadBEShort, short, NonceLength);
  10. AString Nonce;
  11. if (!m_ClientBuffer.ReadString(Nonce, NonceLength))
  12. {
  13. return false;
  14. }
  15.  
  16. m_ClientBuffer.CommitRead();
  17.  
  18. Byte DecryptedSharedSecret[16];
  19. cRsaPrivateKey PrivKey(m_Server.GetPrivateKey());
  20. int res = PrivKey.Decrypt((const Byte *)SharedSecret.data(), SharedSecretLength, DecryptedSharedSecret, sizeof(DecryptedSharedSecret));
  21. if (res < 0)
  22. {
  23. Log("Shared secret decryption failed: %d (0x%x)", res, res);
  24. return false;
  25. }
  26. //m_SharedSecret = DecryptedSharedSecret;
  27.  
  28. Byte NewSharedSecret[128];
  29. cCryptoKey PubKey(m_ServerPublicKey);
  30. int res2 = PubKey.Encrypt((const Byte *)DecryptedSharedSecret, sizeof(DecryptedSharedSecret), NewSharedSecret, sizeof(NewSharedSecret));
  31. if (res2 < 0)
  32. {
  33. Log("Shared secret encryption failed: %d (0x%x)", res2, res2);
  34. return false;
  35. }
  36.  
  37. // Send packet to server with our own shared secret
  38. cByteBuffer Packet(1024);
  39. Packet.WriteVarInt(0x01);
  40. Packet.WriteBEShort(sizeof(NewSharedSecret));
  41. Packet.WriteBuf(NewSharedSecret, sizeof(NewSharedSecret));
  42. Packet.WriteBEShort(NonceLength);
  43. Packet.WriteBuf(Nonce.data(), NonceLength);
  44. AString Pkt;
  45. Packet.ReadAll(Pkt);
  46. cByteBuffer ToServer(1024);
  47. ToServer.WriteVarUTF8String(Pkt);
  48. SERVERSEND(ToServer);
  49.  
  50. m_ServerEncryptor.Init(DecryptedSharedSecret, DecryptedSharedSecret);
  51. m_ServerDecryptor.Init(DecryptedSharedSecret, DecryptedSharedSecret);
  52.  
  53. m_ClientEncryptor.Init(DecryptedSharedSecret, DecryptedSharedSecret);
  54. m_ClientDecryptor.Init(DecryptedSharedSecret, DecryptedSharedSecret);
  55.  
  56. m_ServerState = csEncryptedUnderstood;
  57. m_ClientState = csEncryptedUnderstood;
  58.  
  59. return true;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement