Ejemplo n.º 1
0
        private void WriteHeader()
        {
            int expectedSize = 0x1000 - 4;

            /* set protobuf header size */
            FileContent[0] = (byte)(expectedSize >> 24);
            FileContent[1] = (byte)(expectedSize >> 16);
            FileContent[2] = (byte)(expectedSize >> 8);
            FileContent[3] = (byte)(expectedSize >> 0);

            /* first use one byte padding */
            Header.Padding = new byte[1];
            var stream = new MemoryStream();

            var coder = new ProtoCoder();

            byte[] dataPre = coder.Serialize <FileHeader>(Header);

            /* then determine how many extra bytes to fill */
            long padding = expectedSize - dataPre.Length;

            Header.Padding = new byte[padding];

            byte[] data = coder.Serialize <FileHeader>(Header);

            Array.Copy(data, 0, FileContent, 4, data.Length);
        }
Ejemplo n.º 2
0
        private void ParseBuffer()
        {
            int protoBufLength = (FileContent[0] << 24) | (FileContent[1] << 16) | (FileContent[2] << 8) | FileContent[3];

            if (protoBufLength > 0x10000)
            {
                throw new InvalidDataException();
            }
            byte[] protoBuf      = new byte[protoBufLength];
            int    payloadStart  = protoBufLength + 4;
            int    payloadLength = FileContent.Length - payloadStart;

            byte[] payload = new byte[payloadLength];

            Array.Copy(FileContent, 4, protoBuf, 0, protoBufLength);
            Array.Copy(FileContent, protoBufLength + 4, payload, 0, payloadLength);

            var        coder  = new ProtoCoder();
            FileHeader header = coder.Deserialize <FileHeader>(protoBuf);

            var prov = new SHA1CryptoServiceProvider();
            var hash = prov.ComputeHash(payload);

            HashCorrect = true;
            if (!hash.SequenceEqual(header.Hash))
            {
                HashCorrect = false;
            }

            byte[] data = coder.Serialize(header);

            HeaderLength = data.Length;
            Audio        = payload;
            Header       = header;
        }