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]); } }
public void CreateTest() { CRC32C expected = new CRC32C(); CRC32C actual; actual = CRC32C.Create(); Assert.AreEqual(expected.ToString(), actual.ToString()); }
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; }
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); }
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); } }
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()); }
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)); } }
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)); } }
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)); } }
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)); }
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; }
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; }
public void CRC32CConstructorTest() { CRC32C target = new CRC32C(); Assert.IsNotNull(target); }