private void OnEncrypt(BufferData data, ref int length) { var paddingCount = (byte)(8 - length % 8); var tempArray = BufferManager.RequestBuffer(); tempArray[0] = paddingCount; BufferData.Copy(data, data.Offset, tempArray, paddingCount, length); length += paddingCount; GameCryptManager.Encrypt(tempArray.Buffer, tempArray.BaseOffset, ref length, length, Data); BufferData.Copy(tempArray, 0, data, data.Offset, length); BufferManager.FreeBuffer(tempArray); }
private bool OnDecrypt(BufferData data) { var result = GameCryptManager.Decrypt(data.Buffer, data.BaseOffset + data.Offset, data.RemainingLength, Data); if (!result) { return(false); } var blowfishPadding = data[data.Offset] & 0xF; if (blowfishPadding > 8) { throw new Exception("More than 8 bytes of blowfish padding was added to the packet?"); } data.Offset += blowfishPadding; return(true); }
private void OnReceive(BufferData data) { var packet = new ClientKeyPacket(); packet.Read(data.GetReader()); DHKeyExchange.GenerateServerK(PrivateKey, packet.B, K); var key = new byte[64]; K.WriteToBigEndian(key, 0, key.Length); GameCryptManager.Initialize(Data, key); Socket.Send(new ClientKeyOkPacket()); Cleanup(); Manager.ExchangeDone(this); }
private void OnEncrypt(BufferData data, ref int length) { GameCryptManager.Encrypt(data.Buffer, data.BaseOffset + data.Offset, ref length, data.RemainingLength, Data); }