BitMaker.Utils.Tests.Sha256Test.DoubleHashTest C# (CSharp) 메소드

DoubleHashTest() 개인적인 메소드

private DoubleHashTest ( ) : void
리턴 void
        public unsafe void DoubleHashTest()
        {
            foreach (var test in tests)
            {
                var data = Encoding.UTF8.GetBytes(test);
                var work = Sha256.AllocateInputBuffer(Math.Max(data.Length, Sha256.SHA256_HASH_SIZE)); // enough space for original hash and hash of hash
                var state = Sha256.AllocateStateBuffer();
                var hash = Sha256.AllocateHashBuffer();

                // reference data for comparison against
                var refHash = sha256.ComputeHash(sha256.ComputeHash(data));

                fixed (byte* dataPtr = data, workPtr = work, hashPtr = hash)
                fixed (uint* statePtr = state)
                {
                    // create working copy of data
                    Memory.Copy(dataPtr, workPtr, data.Length);

                    Sha256.Initialize(statePtr);

                    for (int i = 0; i < work.Length / Sha256.SHA256_BLOCK_SIZE; i++)
                    {
                        Sha256.Prepare(workPtr + i * Sha256.SHA256_BLOCK_SIZE, data.Length, i);
                        Sha256.Transform(statePtr, workPtr + i * Sha256.SHA256_BLOCK_SIZE);
                    }

                    // output first hash
                    Sha256.Finalize(statePtr, hashPtr);

                    // copy hash back to work, and hash aagin
                    Memory.Copy(hashPtr, workPtr, Sha256.SHA256_HASH_SIZE);
                    Sha256.Initialize(statePtr);
                    Sha256.Prepare(workPtr, Sha256.SHA256_HASH_SIZE, 0);
                    Sha256.Transform(statePtr, workPtr);
                    Sha256.Finalize(statePtr, hashPtr);
                }

                for (int i = 0; i < hash.Length; i++)
                    Assert.AreEqual(refHash[i], hash[i]);
            }
        }