Esempio n. 1
0
        private static uint[] GetWords(byte[] chunk)
        {
            var words = new uint[80];

            for (int i = 0; i < 16; i++)
            {
                words[i] = ConversionHelpers.ToUInt(ByteArrayHelpers.CopyPartOf(chunk, i * 4, 4).Reverse().ToArray());
            }
            for (int i = 16; i < 80; i++)
            {
                words[i] = MiscHelpers.LeftRotate(words[i - 3] ^ words[i - 8] ^ words[i - 14] ^ words[i - 16], 1);
            }
            return(words);
        }
Esempio n. 2
0
        private static uint[] ProcessChunks(uint[] chunkHash, uint[] words)
        {
            for (int i = 0; i < words.Length; i++)
            {
                uint f, k;
                if (i < 20)
                {
                    f = (chunkHash[1] & chunkHash[2]) | (~chunkHash[1] & chunkHash[3]);
                    k = 0x5A827999;
                }
                else if (i < 40)
                {
                    f = chunkHash[1] ^ chunkHash[2] ^ chunkHash[3];
                    k = 0x6ED9EBA1;
                }
                else if (i < 60)
                {
                    f = (chunkHash[1] & chunkHash[2]) | (chunkHash[1] & chunkHash[3]) | (chunkHash[2] & chunkHash[3]);
                    k = 0x8F1BBCDC;
                }
                else
                {
                    f = chunkHash[1] ^ chunkHash[2] ^ chunkHash[3];
                    k = 0xCA62C1D6;
                }

                uint temp = MiscHelpers.LeftRotate(chunkHash[0], 5) + f + chunkHash[4] + k + words[i];
                chunkHash[4] = chunkHash[3];
                chunkHash[3] = chunkHash[2];
                chunkHash[2] = MiscHelpers.LeftRotate(chunkHash[1], 30);
                chunkHash[1] = chunkHash[0];
                chunkHash[0] = temp;
            }

            return(chunkHash);
        }