Esempio n. 1
0
        public static BeamLiteralsChunk Read(EndianBinaryReader reader, uint size)
        {
            var decSize  = reader.ReadUInt32();
            var encBytes = reader.ReadBytes((int)size - 4); //-decSize size

            var decBytes = ZLibCompressor.Decompress(encBytes);

            if (decBytes.Length != decSize)
            {
                throw new ReadBytesCountException(decBytes.Length, (int)decSize);
            }

            var decReader = new EndianBinaryReader(new MemoryStream(decBytes));
            var litCount  = decReader.ReadUInt32();
            var literals  = new IExtTerm[litCount];

            for (uint i = 0; i < litCount; i++)
            {
                var litSize = decReader.ReadUInt32();
                var oldPos  = decReader.Position;
                literals[i] = BeamTerm.BinaryToTerm(decReader);
                var newPos = decReader.Position;
                if (oldPos + litSize != newPos)
                {
                    throw new Exception();
                }
            }
            return(new BeamLiteralsChunk()
            {
                Literals = literals
            });
        }
Esempio n. 2
0
        public void ZLibCompressStreamTest()
        {
            ZLibCompressor target = new ZLibCompressor();

            string originalText = "Test string.";

            MemoryStream msOriginal = new MemoryStream(ASCIIEncoding.ASCII.GetBytes(originalText));

            byte[]       compressbuffer = new byte[2000];
            MemoryStream msCompressed   = new MemoryStream(compressbuffer);

            int outLen = 0;

            ZLibError err = target.Compress(msOriginal, msCompressed, ref outLen, ZLibQuality.Default);

            Assert.AreEqual(ZLibError.Okay, err);

            MemoryStream msToDecompress = new MemoryStream(compressbuffer, 0, outLen);

            byte[]       decompressbuffer = new byte[2000];
            MemoryStream msFinalResult    = new MemoryStream(decompressbuffer);

            err = target.Decompress(msToDecompress, msFinalResult, ref outLen);
            Assert.AreEqual(ZLibError.Okay, err);

            string result = ASCIIEncoding.ASCII.GetString(decompressbuffer, 0, outLen);

            Assert.AreEqual(originalText, result);
        }
Esempio n. 3
0
 public void ZLibStream_Decompressor_2()
 {
     byte[] input       = new byte[] { 0x78, 0x9C, 0x73, 0x74, 0x72, 0x76, 0x71, 0x75, 0x03, 0x00, 0x05, 0x7E, 0x01, 0x96 };
     byte[] plaintext   = Encoding.UTF8.GetBytes("ABCDEF");
     byte[] decompBytes = ZLibCompressor.Decompress(input);
     Assert.IsTrue(decompBytes.SequenceEqual(plaintext));
 }
Esempio n. 4
0
        public void ZLibStream_Compressor_2()
        {
            byte[] input = Encoding.UTF8.GetBytes("ABCDEF");

            // Compress first,
            // 78-9C-73-74-72-76-71-75-03-00-05-7E-01-96
            byte[] compBytes = ZLibCompressor.Compress(input);

            // then Decompress.
            byte[] decompBytes = ZLibCompressor.Decompress(compBytes);

            // Comprare SHA256 Digest
            byte[] inputDigest  = TestSetup.SHA256Digest(input);
            byte[] decompDigest = TestSetup.SHA256Digest(decompBytes);
            Assert.IsTrue(decompDigest.SequenceEqual(inputDigest));
        }
Esempio n. 5
0
        /// <summary>
        ///     Decompresses the specified input in my sql format.
        /// </summary>
        public static int DecompressInMySQLFormat(byte[] input, int length, out byte[] output)
        {
            int decompressedLength = input[0] | (input[1] << 8) | (input[2] << 16) | (input[3] << 24);

            using (MemoryStream inputStream = new MemoryStream(input, 4, input.Length - 4))
            {
                using (MemoryStream outputStream = ZLibCompressor.Decompress(inputStream))
                {
                    byte[] decompressedByteArray = outputStream.ToArray();

                    if (decompressedByteArray.Length != decompressedLength)
                    {
                        Debugger.Error("ZLibHelper::decompressInMySQLFormat decompressed byte array is corrupted");
                    }

                    output = decompressedByteArray;
                }
            }

            return(decompressedLength);
        }
Esempio n. 6
0
        public void ZLibStream_Decompressor_1()
        {
            void Template(string fileName)
            {
                string compPath   = Path.Combine(TestSetup.SampleDir, fileName + ".zz");
                string decompPath = Path.Combine(TestSetup.SampleDir, fileName);

                using (FileStream decompFs = new FileStream(decompPath, FileMode.Open, FileAccess.Read, FileShare.Read))
                    using (FileStream compFs = new FileStream(compPath, FileMode.Open, FileAccess.Read, FileShare.Read))
                        using (MemoryStream decompMs = ZLibCompressor.Decompress(compFs))
                        {
                            // Compare SHA256 Digest
                            byte[] fileDigest   = TestSetup.SHA256Digest(decompFs);
                            byte[] decompDigest = TestSetup.SHA256Digest(decompMs);
                            Assert.IsTrue(decompDigest.SequenceEqual(fileDigest));
                        }
            }

            Template("ex1.jpg");
            Template("ex2.jpg");
            Template("ex3.jpg");
        }
Esempio n. 7
0
        public void ZLibStream_Compressor_1()
        {
            void Template(string fileName, ZLibCompLevel level)
            {
                string filePath = Path.Combine(TestSetup.SampleDir, fileName);

                using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
                    using (MemoryStream compMs = ZLibCompressor.Compress(fs))
                        using (MemoryStream decompMs = ZLibCompressor.Decompress(compMs))
                        {
                            // Compare SHA256 Digest
                            fs.Position = 0;
                            byte[] fileDigest   = TestSetup.SHA256Digest(fs);
                            byte[] decompDigest = TestSetup.SHA256Digest(decompMs);
                            Assert.IsTrue(decompDigest.SequenceEqual(fileDigest));
                        }
            }

            Template("ex1.jpg", ZLibCompLevel.Default);
            Template("ex2.jpg", ZLibCompLevel.BestCompression);
            Template("ex3.jpg", ZLibCompLevel.BestSpeed);
        }