private void setEncryptedClient(Crypto.AesStream n) { s = n; encrypted = true; }
public bool StartEncryption(string uuid, string sessionID, byte[] token, string serverIDhash, byte[] serverKey) { System.Security.Cryptography.RSACryptoServiceProvider RSAService = Crypto.DecodeRSAPublicKey(serverKey); byte[] secretKey = Crypto.GenerateAESPrivateKey(); Console.ForegroundColor = ConsoleColor.DarkGray; ConsoleIO.WriteLine("Crypto keys & hash generated."); Console.ForegroundColor = ConsoleColor.Gray; if (serverIDhash != "-") { Console.WriteLine("Checking Session..."); if (!SessionCheck(uuid, sessionID, Crypto.getServerHash(serverIDhash, serverKey, secretKey))) { return false; } } //Encrypt the data byte[] key_enc = RSAService.Encrypt(secretKey, false); byte[] token_enc = RSAService.Encrypt(token, false); byte[] key_len = BitConverter.GetBytes((short)key_enc.Length); Array.Reverse(key_len); byte[] token_len = BitConverter.GetBytes((short)token_enc.Length); Array.Reverse(token_len); //Encryption Response packet byte[] packet_id = getVarInt(0x01); byte[] encryption_response = concatBytes(packet_id, key_len, key_enc, token_len, token_enc); byte[] encryption_response_tosend = concatBytes(getVarInt(encryption_response.Length), encryption_response); Send(encryption_response_tosend); //Start client-side encryption Crypto.IAesStream encrypted; if (Program.isUsingMono) { encrypted = new Crypto.MonoAesStream(c.GetStream(), secretKey); } else encrypted = new Crypto.AesStream(c.GetStream(), secretKey); setEncryptedClient(encrypted); //Get the next packet readNextVarInt(); //Skip Packet size (not needed) return (readNextVarInt() == 0x02); //Packet ID. 0x02 = Login Success }