Пример #1
0
        /// <summary>
        /// Tests the 256, 512, and 1024 bit versions of Skein against
        /// known test vectors.
        /// </summary>
        /// <returns>True if the test succeeded without errors, false otherwise.</returns>
        public static bool TestHash()
        {
            var skein256  = new Skein256();
            var skein512  = new Skein512();
            var skein1024 = new Skein1024();

            byte[] result256 =
            {
                0xDF, 0x28, 0xE9, 0x16, 0x63, 0x0D, 0x0B, 0x44,
                0xC4, 0xA8, 0x49, 0xDC, 0x9A, 0x02, 0xF0, 0x7A,
                0x07, 0xCB, 0x30, 0xF7, 0x32, 0x31, 0x82, 0x56,
                0xB1, 0x5D, 0x86, 0x5A, 0xC4, 0xAE, 0x16, 0x2F
            };

            byte[] result512 =
            {
                0x91, 0xcc, 0xa5, 0x10, 0xc2, 0x63, 0xc4, 0xdd, 0xd0, 0x10, 0x53, 0x0a, 0x33, 0x07, 0x33, 0x09,
                0x62, 0x86, 0x31, 0xf3, 0x08, 0x74, 0x7e, 0x1b, 0xcb, 0xaa, 0x90, 0xe4, 0x51, 0xca, 0xb9, 0x2e,
                0x51, 0x88, 0x08, 0x7a, 0xf4, 0x18, 0x87, 0x73, 0xa3, 0x32, 0x30, 0x3e, 0x66, 0x67, 0xa7, 0xa2,
                0x10, 0x85, 0x6f, 0x74, 0x21, 0x39, 0x00, 0x00, 0x71, 0xf4, 0x8e, 0x8b, 0xa2, 0xa5, 0xad, 0xb7
            };

            byte[] result1024 =
            {
                0x1F, 0x3E, 0x02, 0xC4, 0x6F, 0xB8, 0x0A, 0x3F, 0xCD, 0x2D, 0xFB, 0xBC, 0x7C, 0x17, 0x38, 0x00,
                0xB4, 0x0C, 0x60, 0xC2, 0x35, 0x4A, 0xF5, 0x51, 0x18, 0x9E, 0xBF, 0x43, 0x3C, 0x3D, 0x85, 0xF9,
                0xFF, 0x18, 0x03, 0xE6, 0xD9, 0x20, 0x49, 0x31, 0x79, 0xED, 0x7A, 0xE7, 0xFC, 0xE6, 0x9C, 0x35,
                0x81, 0xA5, 0xA2, 0xF8, 0x2D, 0x3E, 0x0C, 0x7A, 0x29, 0x55, 0x74, 0xD0, 0xCD, 0x7D, 0x21, 0x7C,
                0x48, 0x4D, 0x2F, 0x63, 0x13, 0xD5, 0x9A, 0x77, 0x18, 0xEA, 0xD0, 0x7D, 0x07, 0x29, 0xC2, 0x48,
                0x51, 0xD7, 0xE7, 0xD2, 0x49, 0x1B, 0x90, 0x2D, 0x48, 0x91, 0x94, 0xE6, 0xB7, 0xD3, 0x69, 0xDB,
                0x0A, 0xB7, 0xAA, 0x10, 0x6F, 0x0E, 0xE0, 0xA3, 0x9A, 0x42, 0xEF, 0xC5, 0x4F, 0x18, 0xD9, 0x37,
                0x76, 0x08, 0x09, 0x85, 0xF9, 0x07, 0x57, 0x4F, 0x99, 0x5E, 0xC6, 0xA3, 0x71, 0x53, 0xA5, 0x78
            };

            // Hashes are computed twice to make sure the hasher
            // re-initializes itself properly

            byte[] hash;
            int    i;

            // Make test vector for 256-bit hash
            var testVector = new byte[64];

            for (i = 0; i < testVector.Length; i++)
            {
                testVector[i] = (byte)(255 - i);
            }

            hash = skein256.ComputeHash(testVector);
            hash = skein256.ComputeHash(testVector);

            // Compare with 256-bit test vector)
            for (i = 0; i < result256.Length; i++)
            {
                if (hash[i] != result256[i])
                {
                    return(false);
                }
            }


            // Make the test vector for the 512 and 1024-bit hash
            testVector = new byte[128];
            for (i = 0; i < testVector.Length; i++)
            {
                testVector[i] = (byte)(255 - i);
            }

            hash = skein512.ComputeHash(testVector);
            hash = skein512.ComputeHash(testVector);

            // Compare with 512-bit test vector
            for (i = 0; i < result512.Length; i++)
            {
                if (hash[i] != result512[i])
                {
                    return(false);
                }
            }

            hash = skein1024.ComputeHash(testVector);
            hash = skein1024.ComputeHash(testVector);

            // Compare with 1024-bit test vector
            for (i = 0; i < result1024.Length; i++)
            {
                if (hash[i] != result1024[i])
                {
                    return(false);
                }
            }

            return(true);
        }
Пример #2
0
        /// <summary>
        /// Tests the 256, 512, and 1024 bit versions of Skein against
        /// known test vectors.
        /// </summary>
        /// <returns>True if the test succeeded without errors, false otherwise.</returns>
        public static bool TestHash()
        {
            var skein256 = new Skein256();
            var skein512 = new Skein512();
            var skein1024 = new Skein1024();

            byte[] result256 = {
                0xDF, 0x28, 0xE9, 0x16, 0x63, 0x0D, 0x0B, 0x44,
                0xC4, 0xA8, 0x49, 0xDC, 0x9A, 0x02, 0xF0, 0x7A,
                0x07, 0xCB, 0x30, 0xF7, 0x32, 0x31, 0x82, 0x56,
                0xB1, 0x5D, 0x86, 0x5A, 0xC4, 0xAE, 0x16, 0x2F
            };

            byte[] result512 = {
                0x91 ,0xcc ,0xa5 ,0x10 ,0xc2 ,0x63 ,0xc4 ,0xdd ,0xd0 ,0x10 ,0x53 ,0x0a ,0x33 ,0x07 ,0x33 ,0x09,
                0x62 ,0x86 ,0x31 ,0xf3 ,0x08 ,0x74 ,0x7e ,0x1b ,0xcb ,0xaa ,0x90 ,0xe4 ,0x51 ,0xca ,0xb9 ,0x2e,
                0x51 ,0x88 ,0x08 ,0x7a ,0xf4 ,0x18 ,0x87 ,0x73 ,0xa3 ,0x32 ,0x30 ,0x3e ,0x66 ,0x67 ,0xa7 ,0xa2,
                0x10 ,0x85 ,0x6f ,0x74 ,0x21 ,0x39 ,0x00 ,0x00 ,0x71 ,0xf4 ,0x8e ,0x8b ,0xa2 ,0xa5 ,0xad ,0xb7
            };

            byte[] result1024 = {
                0x1F, 0x3E, 0x02, 0xC4, 0x6F, 0xB8, 0x0A, 0x3F, 0xCD, 0x2D, 0xFB, 0xBC, 0x7C, 0x17, 0x38, 0x00,
                0xB4, 0x0C, 0x60, 0xC2, 0x35, 0x4A, 0xF5, 0x51, 0x18, 0x9E, 0xBF, 0x43, 0x3C, 0x3D, 0x85, 0xF9,
                0xFF, 0x18, 0x03, 0xE6, 0xD9, 0x20, 0x49, 0x31, 0x79, 0xED, 0x7A, 0xE7, 0xFC, 0xE6, 0x9C, 0x35,
                0x81, 0xA5, 0xA2, 0xF8, 0x2D, 0x3E, 0x0C, 0x7A, 0x29, 0x55, 0x74, 0xD0, 0xCD, 0x7D, 0x21, 0x7C,
                0x48, 0x4D, 0x2F, 0x63, 0x13, 0xD5, 0x9A, 0x77, 0x18, 0xEA, 0xD0, 0x7D, 0x07, 0x29, 0xC2, 0x48,
                0x51, 0xD7, 0xE7, 0xD2, 0x49, 0x1B, 0x90, 0x2D, 0x48, 0x91, 0x94, 0xE6, 0xB7, 0xD3, 0x69, 0xDB,
                0x0A, 0xB7, 0xAA, 0x10, 0x6F, 0x0E, 0xE0, 0xA3, 0x9A, 0x42, 0xEF, 0xC5, 0x4F, 0x18, 0xD9, 0x37,
                0x76, 0x08, 0x09, 0x85, 0xF9, 0x07, 0x57, 0x4F, 0x99, 0x5E, 0xC6, 0xA3, 0x71, 0x53, 0xA5, 0x78
            };

            // Hashes are computed twice to make sure the hasher
            // re-initializes itself properly

            byte[] hash;
            int i;

            // Make test vector for 256-bit hash
            var testVector = new byte[64];
            for (i = 0; i < testVector.Length; i++)
                testVector[i] = (byte) (255 - i);

            hash = skein256.ComputeHash(testVector);
            hash = skein256.ComputeHash(testVector);

            // Compare with 256-bit test vector)
            for (i = 0; i < result256.Length; i++)
                if (hash[i] != result256[i]) return false;

            // Make the test vector for the 512 and 1024-bit hash
            testVector = new byte[128];
            for (i = 0; i < testVector.Length; i++)
                testVector[i] = (byte)(255 - i);

            hash = skein512.ComputeHash(testVector);
            hash = skein512.ComputeHash(testVector);

            // Compare with 512-bit test vector
            for (i = 0; i < result512.Length; i++)
                if (hash[i] != result512[i]) return false;

            hash = skein1024.ComputeHash(testVector);
            hash = skein1024.ComputeHash(testVector);

            // Compare with 1024-bit test vector
            for (i = 0; i < result1024.Length; i++)
                if (hash[i] != result1024[i]) return false;

            return true;
        }