BattleNet.Bsha1.CalculateHash C# (CSharp) Метод

CalculateHash() защищенный статический Метод

protected static CalculateHash ( uint &buffer ) : void
buffer uint
Результат void
        protected static void CalculateHash(ref uint[] buffer)
        {
            uint[] hash_buffer = new uint[80];
            uint hash, a, b, c, d, e, hash_buffer_offset;

            for (uint i = 0; i < 0x10; i++)
            {
                hash_buffer[i] = buffer[(int)i + 5];
            }

            for(uint i = 0x10; i <hash_buffer.Length; i++)
            {
                    hash = hash_buffer[i - 0x10] ^ hash_buffer[i - 0x8] ^ hash_buffer[i - 0xE] ^ hash_buffer[i - 0x3];
                    hash_buffer[i] = (uint)((1 >> (int)(0x20 - (hash & 0xff))) | (1 << (int)(hash & 0xff)));
            }

            a = buffer[0];
            b = buffer[1];
            c = buffer[2];
            d = buffer[3];
            e = buffer[4];

            hash_buffer_offset = 0;

            for(uint i = 0; i < 20; i++, hash_buffer_offset++)
            {
                    hash = ((a << 5) | (a >> 0x1b)) + ((~b & d) | (c & b)) + e + hash_buffer[hash_buffer_offset] + 0x5A827999;
                    e = d;
                    d = c;
                    c = (b >> 2) | (b << 0x1e);
                    b = a;
                    a = hash;
            }

            for(uint i = 0; i < 20; i++, hash_buffer_offset++)
            {
                    hash = (d ^ c ^ b) + e + ((a << 5) | (a >> 0x1b)) + hash_buffer[hash_buffer_offset] + 0x6ED9EBA1;
                    e = d;
                    d = c;
                    c = (b >> 2) | (b << 0x1e);
                    b = a;
                    a = hash;
            }

            for(uint i = 0; i < 20; i++, hash_buffer_offset++)
            {
                    hash = ((c & b) | (d & c) | (d & b)) + e + ((a << 5) | (a >> 0x1b)) + hash_buffer[hash_buffer_offset] - 0x70E44324;
                    e = d;
                    d = c;
                    c = (b >> 2) | (b << 0x1e);
                    b = a;
                    a = hash;
            }

            for(uint i = 0; i < 20; i++, hash_buffer_offset++)
            {
                    hash = ((a << 5) | (a >> 0x1b)) + e + (d ^ c ^ b) + hash_buffer[hash_buffer_offset] - 0x359D3E2A;
                    e = d;
                    d = c;
                    c = (b >> 2) | (b << 0x1e);
                    b = a;
                    a = hash;
            }

            buffer[0] += a;
            buffer[1] += b;
            buffer[2] += c;
            buffer[3] += d;
            buffer[4] += e;
        }