Exemplo n.º 1
0
        /// <summary>
        /// ハッシュを生成する
        /// </summary>
        /// <param name="buffer">ハッシュ値を計算するbyte配列</param>
        public static byte[] ComputeHash(byte[] buffer)
        {
            if (buffer == null)
            {
                throw new ArgumentNullException("buffer");
            }

            return(T_Crc32_Castagnoli.ComputeHash(buffer, 0, buffer.Length));
        }
Exemplo n.º 2
0
        public static byte[] ComputeHash(ArraySegment <byte> value)
        {
            if (value.Array == null)
            {
                throw new ArgumentNullException("value");
            }

            return(T_Crc32_Castagnoli.ComputeHash(value.Array, value.Offset, value.Count));
        }
        public void Crc32_Castagnoli()
        {
            Random random = new Random();

            Stopwatch sw1 = new Stopwatch();
            Stopwatch sw2 = new Stopwatch();

            var flags = new int[] { 0, 1 };

            var length = 1024;

            byte[] value = new byte[length];

            for (int i = 0; i < 1024 * 1024; i++)
            {
                byte[] result1 = null;
                byte[] result2 = null;

                random.Shuffle(flags);
                foreach (var index in flags)
                {
                    if (index == 0)
                    {
                        sw1.Start();
                        result1 = Library.Security.Crc32_Castagnoli.ComputeHash(value, 0, length);
                        sw1.Stop();
                    }
                    else if (index == 1)
                    {
                        sw2.Start();
                        result2 = T_Crc32_Castagnoli.ComputeHash(value, 0, length);
                        sw2.Stop();
                    }
                }

                Assert.IsTrue(Unsafe.Equals(result1, result2));
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("Native Crc32_Castagnoli: " + sw1.Elapsed.ToString());
            sb.AppendLine("Managed Crc32_Castagnoli: " + sw2.Elapsed.ToString());

            Console.WriteLine(sb.ToString());
        }
Exemplo n.º 4
0
        public void Test_Crc32_Castagnoli()
        {
            byte[] buffer = new byte[1024 * 32];
            _random.NextBytes(buffer);

            Assert.IsTrue(CollectionUtilities.Equals(T_Crc32_Castagnoli.ComputeHash(buffer), Crc32_Castagnoli.ComputeHash(buffer)));

            using (MemoryStream stream1 = new MemoryStream(buffer))
                using (MemoryStream stream2 = new MemoryStream(buffer))
                {
                    Assert.IsTrue(CollectionUtilities.Equals(T_Crc32_Castagnoli.ComputeHash(stream1), Crc32_Castagnoli.ComputeHash(stream2)));
                }

            var list = new List <ArraySegment <byte> >();

            list.Add(new ArraySegment <byte>(buffer));
            list.Add(new ArraySegment <byte>(buffer));
            list.Add(new ArraySegment <byte>(buffer));
            list.Add(new ArraySegment <byte>(buffer));

            Assert.IsTrue(CollectionUtilities.Equals(T_Crc32_Castagnoli.ComputeHash(list), Crc32_Castagnoli.ComputeHash(list)));
        }