Ejemplo n.º 1
0
        private static Byte[] CreatePayload(Int64 offset, Byte magicByte, Byte attributes, Byte[] key, Byte[] payload)
        {
            var crcContentStream = new MemoryStream();
            var crcContentWriter = new BigEndianBinaryWriter(crcContentStream);

            crcContentWriter.Write(magicByte);
            crcContentWriter.Write(attributes);
            crcContentWriter.Write((Int32)key.Length);
            crcContentWriter.Write(key);
            crcContentWriter.Write(payload.Length);
            crcContentWriter.Write(payload);
            var crcContentBytes = crcContentStream.ToArray();

            var crc = Crc32Provider.Compute(crcContentBytes);

            var messageStream = new MemoryStream();
            var messageWriter = new BigEndianBinaryWriter(messageStream);

            messageWriter.Write(crc);
            messageWriter.Write(crcContentBytes);
            var messageBytes = messageStream.ToArray();

            var messageSetStream = new MemoryStream();
            var messageSetWriter = new BigEndianBinaryWriter(messageSetStream);
            var messageSize      = messageBytes.Length;

            messageSetWriter.Write(offset);
            messageSetWriter.Write(messageSize);
            messageSetWriter.Write(messageBytes);
            return(messageSetStream.ToArray());
        }
Ejemplo n.º 2
0
 public void Write(BigEndianBinaryWriter bw)
 {
     bw.Write((int)Identifier);
     bw.Write(EntryCount);
     bw.Write(Unknown1);
     bw.Write((int)-3);           // not encrypted, we won't write encrypted archives :)
 }
Ejemplo n.º 3
0
            public byte[] GenerateInviteData(int maxLength)
            {
                if (maxLength < 16)
                {
                    throw new ArgumentException($@"{nameof(maxLength)} should be at least 18", nameof(maxLength));
                }
                var memoryStream = new MemoryStream();
                var binaryWriter = new BigEndianBinaryWriter(memoryStream);
                var allEndPoints = SavedIpEndPoints.Select(x => x.Key).Select(Convert.FromBase64String).OrderBy(x => x.Length).ThenBy(x => Guid.NewGuid()).ToList();
                var needCount    = 0;
                var totalLength  = 16;

                while (totalLength < maxLength && needCount < allEndPoints.Count)
                {
                    totalLength += allEndPoints[needCount].Length + 2;
                    needCount++;
                }
                var inviteEndPoints = allEndPoints.Take(needCount).ToList();

                binaryWriter.Write(Id.ToByteArray());
                foreach (var endPoint in inviteEndPoints)
                {
                    binaryWriter.Write((ushort)endPoint.Length);
                    binaryWriter.Write(endPoint);
                }
                return(memoryStream.ToArray());
            }
Ejemplo n.º 4
0
        public byte[] Encrypt(ISymmetricKey key, byte[] data)
        {
            if (!(key is AesSymmetricKey))
            {
                throw new ArgumentException("Wrong key type", nameof(key));
            }
            var aesKey = (AesSymmetricKey)key;

            using (var rijndaelManaged = new RijndaelManaged())
            {
                rijndaelManaged.KeySize = 128;
                rijndaelManaged.Key     = aesKey.Key;
                rijndaelManaged.GenerateIV();
                using (var memoryStream = new MemoryStream())
                {
                    memoryStream.Write(rijndaelManaged.IV, 0, 16);
                    var encryptor = rijndaelManaged.CreateEncryptor(rijndaelManaged.Key, rijndaelManaged.IV);
                    using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
                    {
                        using (var binaryWriter = new BigEndianBinaryWriter(cryptoStream))
                        {
                            binaryWriter.Write(data.Length);
                            binaryWriter.Write(data);
                        }

                        return(memoryStream.ToArray());
                    }
                }
            }
        }
Ejemplo n.º 5
0
        public void Write(BigEndianBinaryWriter bw)
        {
            /*
             * foreach (var entry in _entries)
             * {
             *  entry.Write(bw);
             * }
             * byte[] stringData = Encoding.ASCII.GetBytes(_nameStringTable);
             * bw.Write(stringData);
             */

            MemoryStream          ms     = new MemoryStream();
            BigEndianBinaryWriter tempbw = new BigEndianBinaryWriter(ms);

            foreach (var entry in _entries)
            {
                entry.Write(tempbw);
            }
            BigEndianBinaryReader tempbr = new BigEndianBinaryReader(ms);

            ms.Position = 0;
            //bw.Write(DataUtil.Encrypt(tempbr.ReadBytes((int)tempbr.BaseStream.Length)));
            bw.Write(tempbr.ReadBytes((int)tempbr.BaseStream.Length));
            byte[] stringData = Encoding.ASCII.GetBytes(_nameStringTable);
            //bw.Write(DataUtil.Encrypt(stringData));
            bw.Write(stringData);
        }
Ejemplo n.º 6
0
        protected override byte[] SerializePayload()
        {
            byte[] payload = new byte[sizeof(int) + sizeof(short)];
            var    writer  = new BigEndianBinaryWriter(new MemoryStream(payload));

            writer.Write(ChunkOffset);
            writer.Write(ChunkLength);
            return(payload);
        }
        protected override byte[] SerializePayload()
        {
            byte[] payload = new byte[sizeof(byte) + sizeof(int)];
            var    writer  = new BigEndianBinaryWriter(new MemoryStream(payload));

            writer.Write((byte)2);
            writer.Write(DataLength);
            return(payload);
        }
Ejemplo n.º 8
0
        public void ToStream(Stream streamTo)
        {
            var writer = new BigEndianBinaryWriter(streamTo);

            writer.Write(DestinationAddress.GetAddressBytes());
            writer.Write(SourceAddress.GetAddressBytes());
            writer.Write((ushort)Type);
            PayloadPacket.ToStream(streamTo);
        }
Ejemplo n.º 9
0
        public override void Write(BigEndianBinaryWriter bw)
        {
            bw.Write(Flags);
            bw.Write(NameOffset);

            uint temp = (uint)ContentEntryIndex | 0x80000000;

            bw.Write(temp);
            bw.Write(ContentEntryCount);
        }
Ejemplo n.º 10
0
        public void ToStream(Stream streamTo)
        {
            var writer = new BigEndianBinaryWriter(streamTo);

            writer.Write(SourcePort);
            writer.Write(DestinationPort);
            writer.Write(Length);
            writer.Write(checksum);
            PayloadPacket.ToStream(streamTo);
        }
Ejemplo n.º 11
0
        protected override byte[] SerializePayload()
        {
            byte[] host    = Encoding.ASCII.GetBytes(Host);
            byte[] payload = new byte[sizeof(ushort) + sizeof(ushort) + host.Length];
            var    writer  = new BigEndianBinaryWriter(new MemoryStream(payload));

            writer.Write((ushort)host.Length);
            writer.Write(host);
            writer.Write(Port);
            return(payload);
        }
Ejemplo n.º 12
0
        protected override byte[] SerializePayload()
        {
            // bool/char 01
            // 00 0A
            byte[] payload = new byte[sizeof(byte) + sizeof(uint)];
            var    writer  = new BigEndianBinaryWriter(new MemoryStream(payload));

            writer.Write(Success);
            writer.Write(Unknown);
            return(payload);
        }
Ejemplo n.º 13
0
        protected override byte[] SerializePayload()
        {
            byte[] data    = Encoding.ASCII.GetBytes(User);
            byte[] payload = new byte[sizeof(ushort) + data.Length];
            var    writer  = new BigEndianBinaryWriter(new MemoryStream(payload));

            writer.Write((ushort)data.Length);
            writer.Write(data);

            return(payload);
        }
Ejemplo n.º 14
0
        public void Write(BigEndianBinaryWriter writer)
        {
            writer.Write(LayerWidth);
            writer.Write(LayerHeight);
            writer.Write((byte)SubLayers.Length);

            foreach (var sublayer in SubLayers)
            {
                sublayer.Write(writer);
            }
        }
Ejemplo n.º 15
0
        protected override byte[] SerializePayload()
        {
            byte[] notification = Encoding.ASCII.GetBytes(Notification);
            byte[] payload      = new byte[sizeof(byte) + sizeof(ushort) + notification.Length];
            var    writer       = new BigEndianBinaryWriter(new MemoryStream(payload));

            writer.Write(Unknown);
            writer.Write((ushort)notification.Length);
            writer.Write(notification);
            return(payload);
        }
Ejemplo n.º 16
0
 public void SendMessage(byte messageId, byte[] data)
 {
     using (var ms = new MemoryStream())
     {
         BinaryWriter writer = new BigEndianBinaryWriter(ms);
         writer.Write(messageId);
         writer.Write(data);
         writer.Flush();
         Peer.Send(ms.ToArray());
     }
 }
Ejemplo n.º 17
0
        public byte[] GetBytes()
        {
            var memoryStream = new MemoryStream();
            var writer       = new BigEndianBinaryWriter(memoryStream);

            var encryptedSymmetricKey = AsymmetricHelper.Encrypt(networkKey, SymmetricKeyBytes);

            writer.Write((ushort)encryptedSymmetricKey.Length);
            writer.Write(encryptedSymmetricKey);

            return(memoryStream.ToArray());
        }
Ejemplo n.º 18
0
        public ResponseException(int errCode, string message) : base(null)
        {
            Function = RESPONSE_FUNCTION_EXCEPTION;
            var stream = new MemoryStream();

            using (var writer = new BigEndianBinaryWriter(stream))
            {
                writer.Write(errCode);
                writer.Write(message);
                Data = stream.ToArray();
            }
        }
Ejemplo n.º 19
0
        public byte[] GetBytes()
        {
            var memoryStream = new MemoryStream();
            var writer       = new BigEndianBinaryWriter(memoryStream);

            writer.Write((ushort)Clients.Length);
            foreach (var client in Clients)
            {
                writer.Write(client.Key);
                writer.Write(client.Value);
            }
            return(memoryStream.ToArray());
        }
Ejemplo n.º 20
0
 private BString EncodeEndPoints(IList <IPEndPoint> endpoints)
 {
     using (var ms = new MemoryStream())
     {
         var writer = new BigEndianBinaryWriter(ms);
         foreach (var endpoint in endpoints)
         {
             writer.Write(endpoint.Address.GetAddressBytes());
             writer.Write((ushort)endpoint.Port);
         }
         return(new BString(ms.ToArray()));
     }
 }
Ejemplo n.º 21
0
        public byte[] GetBytes()
        {
            var memoryStream = new MemoryStream();
            var writer       = new BigEndianBinaryWriter(memoryStream);

            writer.Write((ushort)UnDirectClientIds.Length);
            foreach (var id in UnDirectClientIds)
            {
                writer.Write(id);
            }

            return(memoryStream.ToArray());
        }
Ejemplo n.º 22
0
        public byte[] GetBytes()
        {
            var memoryStream = new MemoryStream();
            var writer       = new BigEndianBinaryWriter(memoryStream);

            writer.Write((ushort)UnDirectClientPings.Length);
            foreach (var pingPair in UnDirectClientPings)
            {
                writer.Write(pingPair.Id);
                writer.Write(pingPair.Ping);
            }

            return(memoryStream.ToArray());
        }
Ejemplo n.º 23
0
        public override void Write(BigEndianBinaryWriter bw)
        {
            bw.Write(NameOffset);
            bw.Write(Flags);
            bw.Write((int)((uint)ContentEntryIndex | 0x80000000));

            /*
             * if (newEntryIndex > 0)
             *  bw.Write((int)((uint)newEntryIndex | 0x80000000));
             * else
             *  bw.Write((int)((uint)ContentEntryIndex | 0x80000000));
             */
            bw.Write(ContentEntryCount);
            bw.Write(UNKNOWN);
        }
Ejemplo n.º 24
0
        protected override byte[] SerializePayload()
        {
            byte[] payload = new byte[sizeof(byte) + Properties.Length * TusProperty.Size];
            var    writer  = new BigEndianBinaryWriter(new MemoryStream(payload));

            writer.Write((byte)Properties.Length);
            foreach (var property in Properties)
            {
                writer.Write(property.Index);
                writer.Write(property.Value1);
                writer.Write(property.Value2);
            }

            return(payload);
        }
Ejemplo n.º 25
0
            // Mock out the web request
            protected override Task <Stream> HttpGet(string requestUri)
            {
                BDictionary response;

                if (compact)
                {
                    var ms     = new MemoryStream();
                    var writer = new BigEndianBinaryWriter(ms);

                    // Peer 1
                    writer.Write(new byte[] { 192, 168, 0, 1 });
                    writer.Write((ushort)5001);

                    // Peer 2
                    writer.Write(new byte[] { 192, 168, 0, 2 });
                    writer.Write((ushort)5002);

                    writer.Flush();

                    response = new BDictionary
                    {
                        ["peers"] = new BString(ms.ToArray())
                    };
                }
                else
                {
                    response = new BDictionary
                    {
                        ["peers"] = new BList
                        {
                            new BDictionary
                            {
                                ["ip"]   = new BString("192.168.0.1"),
                                ["port"] = new BNumber(5001)
                            },
                            new BDictionary
                            {
                                ["ip"]   = new BString("192.168.0.2"),
                                ["port"] = new BNumber(5002)
                            }
                        }
                    };
                }

                var resultStream = new MemoryStream(response.EncodeAsBytes());

                return(Task.FromResult((Stream)resultStream));
            }
Ejemplo n.º 26
0
            private async Task SendConnectResponse(int transactionId, long connectionId)
            {
                using (var ms = new MemoryStream())
                {
                    int action = (int)MessageAction.Connect;

                    var writer = new BigEndianBinaryWriter(ms);
                    writer.Write(action);
                    writer.Write(transactionId);
                    writer.Write(connectionId);

                    var data = ms.ToArray();

                    await _client.SendAsync(data, data.Length, _sender);
                }
            }
Ejemplo n.º 27
0
        public void StringNotSupportedTest()
        {
            // arrange
            var memoryStream = new MemoryStream();
            var binaryWriter = new BigEndianBinaryWriter(memoryStream);

            binaryWriter.Write("test");
        }
Ejemplo n.º 28
0
        public void WhenMessageIsTruncatedThenBufferUnderRunExceptionIsThrown()
        {
            // arrange
            var offset       = (Int64)0;
            var message      = new Byte[] { };
            var messageSize  = message.Length + 1;
            var memoryStream = new MemoryStream();
            var binaryWriter = new BigEndianBinaryWriter(memoryStream);

            binaryWriter.Write(offset);
            binaryWriter.Write(messageSize);
            binaryWriter.Write(message);
            var payloadBytes = memoryStream.ToArray();

            // act/assert
            Assert.Throws <BufferUnderRunException>(() => Message.DecodeMessageSet(payloadBytes).ToList());
        }
Ejemplo n.º 29
0
 public void Write(BigEndianBinaryWriter writer)
 {
     writer.Write(_internalValue);
     foreach (var frame in Frames)
     {
         frame.Write(writer);
     }
 }
Ejemplo n.º 30
0
            private byte[] BuildResponse()
            {
                BDictionary response;

                if (_compact)
                {
                    var ms     = new MemoryStream();
                    var writer = new BigEndianBinaryWriter(ms);

                    // Peer 1
                    writer.Write(new byte[] { 192, 168, 0, 1 });
                    writer.Write((ushort)5001);

                    // Peer 2
                    writer.Write(new byte[] { 192, 168, 0, 2 });
                    writer.Write((ushort)5002);

                    writer.Flush();

                    response = new BDictionary
                    {
                        ["peers"] = new BString(ms.ToArray()),
                    };
                }
                else
                {
                    response = new BDictionary
                    {
                        ["peers"] = new BList
                        {
                            new BDictionary
                            {
                                ["ip"]   = new BString("192.168.0.1"),
                                ["port"] = new BNumber(5001),
                            },
                            new BDictionary
                            {
                                ["ip"]   = new BString("192.168.0.2"),
                                ["port"] = new BNumber(5002),
                            },
                        },
                    };
                }

                return(response.EncodeAsBytes());
            }
Ejemplo n.º 31
0
        public void Save()
        {
            BigEndianBinaryWriter TROPUSRWriter = new BigEndianBinaryWriter(new FileStream(path + "TROPUSR.DAT", FileMode.Open));
            TROPUSRWriter.Write(header.StructToBytes());
            TypeRecord account_id_Record = typeRecordTable[2];
            TROPUSRWriter.BaseStream.Position = account_id_Record.Offset + 32; // 空行
            TROPUSRWriter.Write(account_id.ToCharArray()); // 帳號

            TypeRecord trophy_id_Record = typeRecordTable[3];
            TROPUSRWriter.BaseStream.Position = trophy_id_Record.Offset + 16;
            TROPUSRWriter.Write(trophy_id.ToCharArray()); // 獎杯ID
            TROPUSRWriter.BaseStream.Position = trophy_id_Record.Offset + 80;
            //TROPUSRWriter.Write(AchievementRate[0]); // 完成度
            //TROPUSRWriter.Write(AchievementRate[1]); // 完成度
            //TROPUSRWriter.Write(AchievementRate[2]); // 完成度
            //TROPUSRWriter.Write(AchievementRate[3]); // 完成度

            TypeRecord TrophyType_Record = typeRecordTable[4];
            TROPUSRWriter.BaseStream.Position = TrophyType_Record.Offset;
            foreach (TrophyType type in trophyTypeTable) {
                TROPUSRWriter.BaseStream.Position += 16;
                TROPUSRWriter.Write(type.StructToBytes());
            }

            TypeRecord trophyListInfo_Record = typeRecordTable[5];
            TROPUSRWriter.BaseStream.Position = trophyListInfo_Record.Offset + 16;
            TROPUSRWriter.Write(trophyListInfo.StructToBytes());

            TypeRecord TrophyTimeInfo_Record = typeRecordTable[6];
            TROPUSRWriter.BaseStream.Position = TrophyTimeInfo_Record.Offset;
            foreach (TrophyTimeInfo time in trophyTimeInfoTable) {
                TROPUSRWriter.BaseStream.Position += 16;
                TROPUSRWriter.Write(time.StructToBytes());
            }

            TypeRecord unknowType7_Record = typeRecordTable[7];
            TROPUSRWriter.BaseStream.Position = unknowType7_Record.Offset + 16;
            TROPUSRWriter.Write(unknowType7.StructToBytes());

            TROPUSRWriter.Flush();
            TROPUSRWriter.Close();
        }
Ejemplo n.º 32
0
        public void Save()
        {
            BigEndianBinaryWriter TROPTRNSWriter = new BigEndianBinaryWriter(new FileStream(path + "TROPTRNS.DAT", FileMode.Open));
            TROPTRNSWriter.Write(header.StructToBytes());
            TypeRecord account_id_Record = typeRecordTable[2];
            TROPTRNSWriter.BaseStream.Position = account_id_Record.Offset + 32; // 空行
            TROPTRNSWriter.Write(account_id.ToCharArray());

            TypeRecord trophy_id_Record = typeRecordTable[3];
            TROPTRNSWriter.BaseStream.Position = trophy_id_Record.Offset + 16; // 空行
            TROPTRNSWriter.Write(trophy_id.ToCharArray());
            TROPTRNSWriter.BaseStream.Position = trophy_id_Record.Offset + 32; // 字串長度不定,直接跳過
            TROPTRNSWriter.Write(u1);
            Console.WriteLine(trophyInfoTable.Count);
            TROPTRNSWriter.Write(trophyInfoTable.Count+1); // AllGetTrophysCount
            AllSyncPSNTrophyCount = 0;
            for (int i = 0; i < trophyInfoTable.Count; i++) {
                if (trophyInfoTable[i].IsSync) {
                    AllSyncPSNTrophyCount++;
                }
            }
            // AllSyncPSNTrophyCount++;
            TROPTRNSWriter.Write(AllSyncPSNTrophyCount+1);

            // Type 4
            TypeRecord TrophyType_Record = typeRecordTable[4];
            TROPTRNSWriter.BaseStream.Position = TrophyType_Record.Offset;
            TROPTRNSWriter.BaseStream.Position += 16;
            TROPTRNSWriter.Write(trophyInitTime.StructToBytes());

            for (int i = 0; i < trophyInfoTable.Count; i++) {
                TROPTRNSWriter.BaseStream.Position += 16;
                TrophyInfo ti = trophyInfoTable[i];
                ti.SequenceNumber = i+1; // 整理順序
                //if (i == 0) {
                //    ti._unknowInt2 = 0x100000;
                //} else {
                //    ti._unknowInt2 = 0x100000;
                //}
                ti._unknowInt3 = 0;

                trophyInfoTable[i] = ti;
                TROPTRNSWriter.Write(trophyInfoTable[i].StructToBytes());
            }

            byte[] emptyStruct = new byte[Marshal.SizeOf(typeof(TrophyInfo))];
            Array.Clear(emptyStruct, 0, emptyStruct.Length);
            TrophyInfo emptyTrophyInfo = emptyStruct.ToStruct<TrophyInfo>();
            for (int i = trophyInfoTable.Count; i < TrophyType_Record.Size; i++) {
                TROPTRNSWriter.BaseStream.Position += 16;
                emptyTrophyInfo.SequenceNumber = i + 1;
                TROPTRNSWriter.Write(emptyTrophyInfo.StructToBytes());
            }

            TROPTRNSWriter.Flush();
            TROPTRNSWriter.Close();
        }