Exemplo n.º 1
0
        public void ComputeHashTestBuffer()
        {
            CRC32C target = new CRC32C();

            byte[] buffer = { 0x01, 0xC0, 0x00, 0x00,
                              0x00, 0x00, 0x00, 0x00,
                              0x00, 0x00, 0x00, 0x00,
                              0x00, 0x00, 0x00, 0x00,
                              0x01, 0xFE, 0x60, 0xAC,
                              0x00, 0x00, 0x00, 0x08,
                              0x00, 0x00, 0x00, 0x04,
                              0x00, 0x00, 0x00, 0x09,
                              0x25, 0x00, 0x00, 0x00,
                              0x00, 0x00, 0x00, 0x00,
                              0x00, 0x00, 0x00, 0x00,
                              0x00, 0x00, 0x00, 0x00 };
            byte[] expected = { 0xeb, 0x75, 0x4f, 0x66 };
            byte[] actual;
            actual = target.ComputeHash(buffer);
            Assert.AreEqual(expected.Length, actual.Length);
            for (int i = 0; i < expected.Length; i++)
            {
                Assert.AreEqual(expected[i], actual[i]);
            }
        }
Exemplo n.º 2
0
        public void CreateTest()
        {
            CRC32C expected = new CRC32C();
            CRC32C actual;

            actual = CRC32C.Create();
            Assert.AreEqual(expected.ToString(), actual.ToString());
        }
Exemplo n.º 3
0
 public override void ProcessOutBoundPacket(IPEndPoint endPoint,
                                            ref byte[] data,
                                            ref int offset,
                                            ref int length)
 {
     FastBitConverter.GetBytes(data, length, CRC32C.Compute(data, offset, length));
     length += CRC32C.ChecksumSize;
 }
Exemplo n.º 4
0
        private static byte[] GetTestPacketWithCrc()
        {
            byte[] testMsg = GetTestMessageBytes();
            uint   crc32   = CRC32C.Compute(testMsg, 0, testMsg.Length);

            byte[] packet = new byte[testMsg.Length + CRC32C.ChecksumSize];
            Buffer.BlockCopy(testMsg, 0, packet, 0, testMsg.Length);
            FastBitConverter.GetBytes(packet, testMsg.Length, crc32);
            return(packet);
        }
Exemplo n.º 5
0
        public void Serialize(BinaryWriter writer)
        {
            byte[] data = Encoding.UTF8.GetBytes(Value);
            writer.Write((uint)data.Length);

            if (data.Length > 0)
            {
                writer.Write(CRC32C.Checksum(data) & ~0x80000000u);
                writer.Write(data);
            }
        }
Exemplo n.º 6
0
        public static byte[] Serialize(BaseCommand command, MessageMetadata metadata, ReadOnlySequence <byte> payload)
        {
            var stream = MemoryManager.GetStream();
            var writer = new BinaryWriter(stream);

            // write fake totalLength
            for (var i = 0; i < 4; i++)
            {
                stream.WriteByte(0);
            }

            // write commandPayload
            ProtoBuf.Serializer.SerializeWithLengthPrefix(stream, command, PrefixStyle.Fixed32BigEndian);

            var stream1Size = (int)stream.Length;

            // write magic number 0x0e01 0x0e, 0x01
            stream.WriteByte(14);
            stream.WriteByte(1);

            for (var i = 0; i < 4; i++)
            {
                stream.WriteByte(0);
            }
            // write metadata
            ProtoBuf.Serializer.SerializeWithLengthPrefix(stream, metadata, PrefixStyle.Fixed32BigEndian);

            var stream2Size       = (int)stream.Length;
            var totalMetadataSize = stream2Size - stream1Size - 6;

            // write payload
            stream.Write(payload.ToArray(), 0, (int)payload.Length);

            var frameSize   = (int)stream.Length;
            var totalSize   = frameSize - 4;
            var payloadSize = frameSize - stream2Size;

            var crcStart        = stream1Size + 2;
            var crcPayloadStart = crcStart + 4;

            //write CRC
            stream.Seek(crcPayloadStart, SeekOrigin.Begin);
            var crc = (int)CRC32C.Get(0u, stream, totalMetadataSize + payloadSize);

            stream.Seek(crcStart, SeekOrigin.Begin);
            writer.Write(crc.IntToBigEndian());

            //write total size and command size
            stream.Seek(0L, SeekOrigin.Begin);
            writer.Write(totalSize.IntToBigEndian());

            stream.Seek(0L, SeekOrigin.Begin);
            return(stream.ToArray());
        }
Exemplo n.º 7
0
        public void TestCRC32CTestVector()
        {
            char[] data_32_test = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
            uint   knownValue   = 0xE3069283;

            using (var crc = new CRC32C())
            {
                byte[] res = crc.ComputeHash(Encoding.ASCII.GetBytes(data_32_test));
                Assert.AreEqual(knownValue, BitConverter.ToUInt32(res, 0));
            }
        }
Exemplo n.º 8
0
        public void TestCRC32CValues()
        {
            byte[] data_32_values = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 };
            uint   knownValue     = 0x46DD794E;

            using (var crc = new CRC32C())
            {
                byte[] res = crc.ComputeHash(data_32_values);
                Assert.AreEqual(knownValue, BitConverter.ToUInt32(res, 0));
            }
        }
Exemplo n.º 9
0
        public void TestCRC32CZeros()
        {
            byte[] data_32_zeroes   = new byte[32];
            uint   knownCrc32cZeros = 0x8A9136AA;

            using (var crc = new CRC32C())
            {
                byte[] res = crc.ComputeHash(data_32_zeroes);
                Assert.AreEqual(knownCrc32cZeros, BitConverter.ToUInt32(res, 0));
            }
        }
Exemplo n.º 10
0
        public void ComputeLatencyTimesCrc32c()
        {
            uint Kb1            = 1024;
            uint Mb1            = Kb1 * 1024;
            uint Gb1            = Mb1 * 1024;
            int  amountComputed = 0;
            uint crcValue       = 0;
            int  dataSize       = 1024;

            byte[] dataToWrite = new byte[dataSize];

            Random rand = new Random();

            rand.NextBytes(dataToWrite);

            var crc = new CRC32C();

            Stopwatch sw = Stopwatch.StartNew();

            while (amountComputed < Kb1)
            {
                crcValue        = crc.ComputeRunning(dataToWrite, dataSize, crcValue);
                amountComputed += dataSize;
            }

            long end = sw.ElapsedMilliseconds;

            Console.WriteLine(String.Format("CRC32C, 1KB, computation time: {0} milliseconds.", end));

            sw.Restart();
            amountComputed = 0;

            while (amountComputed < Mb1)
            {
                crcValue        = crc.ComputeRunning(dataToWrite, dataSize, crcValue);
                amountComputed += dataSize;
            }

            end = sw.ElapsedMilliseconds;
            Console.WriteLine(String.Format("CRC32C, 1MB, computation time: {0} milliseconds.", end));

            sw.Restart();
            amountComputed = 0;

            while (amountComputed < Gb1)
            {
                crcValue        = crc.ComputeRunning(dataToWrite, dataSize, crcValue);
                amountComputed += dataSize;
            }

            end = sw.ElapsedMilliseconds;
            Console.WriteLine(String.Format("CRC32C, 1GB, computation time: {0} milliseconds.", end));
        }
Exemplo n.º 11
0
        public override void ProcessInboundPacket(ref byte[] data, ref int length)
        {
            if (length < NetConstants.HeaderSize + CRC32C.ChecksumSize)
            {
                NetDebug.WriteError("[NM] DataReceived size: bad!");
                return;
            }

            int checksumPoint = length - CRC32C.ChecksumSize;

            if (CRC32C.Compute(data, 0, checksumPoint) != BitConverter.ToUInt32(data, checksumPoint))
            {
                NetDebug.Write("[NM] DataReceived checksum: bad!");
                return;
            }
            length -= CRC32C.ChecksumSize;
        }
Exemplo n.º 12
0
        public override void ProcessInboundPacket(ref IPEndPoint endPoint, ref byte[] data, ref int offset, ref int length)
        {
            if (length < NetConstants.HeaderSize + CRC32C.ChecksumSize)
            {
                NetDebug.WriteError("[NM] DataReceived size: bad!");
                //Set length to 0 to have netManager drop the packet.
                length = 0;
                return;
            }

            int checksumPoint = length - CRC32C.ChecksumSize;

            if (CRC32C.Compute(data, offset, checksumPoint) != BitConverter.ToUInt32(data, checksumPoint))
            {
                NetDebug.Write("[NM] DataReceived checksum: bad!");
                //Set length to 0 to have netManager drop the packet.
                length = 0;
                return;
            }
            length -= CRC32C.ChecksumSize;
        }
Exemplo n.º 13
0
        public void CRC32CConstructorTest()
        {
            CRC32C target = new CRC32C();

            Assert.IsNotNull(target);
        }