public static unsafe void DecryptPacket(Blowfish blowfish, ref BasePacket packet) { byte[] data = packet.data; int size = packet.header.packetSize; int offset = 0; while (offset < data.Length) { if (data.Length < offset + SubPacket.SUBPACKET_SIZE) { throw new OverflowException("Packet Error: Subpacket was too small"); } SubPacketHeader header; fixed(byte *pdata = &data[offset]) { header = (SubPacketHeader)Marshal.PtrToStructure(new IntPtr(pdata), typeof(SubPacketHeader)); } if (data.Length < offset + header.subpacketSize) { throw new OverflowException("Packet Error: Subpacket size didn't equal subpacket data"); } blowfish.Decipher(data, offset + 0x10, header.subpacketSize - 0x10); offset += header.subpacketSize; } }
public static BasePacket CreatePacket(SubPacket subpacket, bool isAuthed, bool isEncrypted) { //Create Header BasePacketHeader header = new BasePacketHeader(); byte[] data = null; header.isAuthenticated = isAuthed ? (byte)1 : (byte)0; header.isEncrypted = isEncrypted ? (byte)1 : (byte)0; header.numSubpackets = 1; header.packetSize = BASEPACKET_SIZE; header.timestamp = Utils.MilisUnixTimeStampUTC(); //Get packet size header.packetSize += subpacket.header.subpacketSize; data = new byte[header.packetSize - 0x10]; //Add Subpackets byte[] subpacketData = subpacket.getBytes(); Array.Copy(subpacketData, 0, data, 0, subpacketData.Length); Debug.Assert(data != null); BasePacket packet = new BasePacket(header, data); return(packet); }
public unsafe static BasePacketHeader GetHeader(byte[] bytes) { BasePacketHeader header; if (bytes.Length < BASEPACKET_SIZE) throw new OverflowException("Packet Error: Packet was too small"); fixed(byte *pdata = &bytes[0]) { header = (BasePacketHeader)Marshal.PtrToStructure(new IntPtr(pdata), typeof(BasePacketHeader)); } return(header); }
public static BasePacket CreatePacket(byte[] data, bool isAuthed, bool isEncrypted) { Debug.Assert(data != null); //Create Header BasePacketHeader header = new BasePacketHeader(); header.isAuthenticated = isAuthed ? (byte)1 : (byte)0; header.isEncrypted = isEncrypted ? (byte)1 : (byte)0; header.numSubpackets = 1; header.packetSize = BASEPACKET_SIZE; header.timestamp = Utils.MilisUnixTimeStampUTC(); //Get packet size header.packetSize += (ushort)data.Length; BasePacket packet = new BasePacket(header, data); return(packet); }
public unsafe BasePacket(byte[] bytes, ref int offset) { if (bytes.Length < offset + BASEPACKET_SIZE) { throw new OverflowException("Packet Error: Packet was too small"); fixed(byte *pdata = &bytes[offset]) { header = (BasePacketHeader)Marshal.PtrToStructure(new IntPtr(pdata), typeof(BasePacketHeader)); } int packetSize = header.packetSize; Console.WriteLine("packetSize: " + packetSize); if (bytes.Length < offset + header.packetSize) throw new OverflowException("Packet Error: Packet size didn't equal given size"); } data = new byte[packetSize - BASEPACKET_SIZE]; Array.Copy(bytes, offset + BASEPACKET_SIZE, data, 0, packetSize - BASEPACKET_SIZE); offset += packetSize; }
/// <summary> /// Default BasePacketConnectionType = zone /// </summary> /// <param name="subpackets"></param> /// <param name="isAuthed"></param> /// <param name="isEncrypted"></param> /// <returns></returns> public static BasePacket CreatePacket(List <SubPacket> subpackets, bool isAuthed, bool isEncrypted, BasePacketConnectionTypes connectionType = BasePacketConnectionTypes.Zone) { //Create Header BasePacketHeader header = new BasePacketHeader(); byte[] data = null; header.isAuthenticated = isAuthed ? (byte)1 : (byte)0; header.isEncrypted = isEncrypted ? (byte)1 : (byte)0; header.numSubpackets = (ushort)subpackets.Count; header.packetSize = BASEPACKET_SIZE; header.timestamp = Utils.MilisUnixTimeStampUTC(); header.connectionType = (ushort)connectionType; //Get packet size foreach (SubPacket subpacket in subpackets) { header.packetSize += subpacket.header.subpacketSize; } data = new byte[header.packetSize - 0x10]; //Add Subpackets int offset = 0; foreach (SubPacket subpacket in subpackets) { byte[] subpacketData = subpacket.getBytes(); Array.Copy(subpacketData, 0, data, offset, subpacketData.Length); offset += (ushort)subpacketData.Length; } Debug.Assert(data != null && offset == data.Length && header.packetSize == 0x10 + offset); BasePacket packet = new BasePacket(header, data); return(packet); }
public BasePacket(BasePacketHeader header, byte[] data) { this.header = header; this.data = data; }