System.Security.Cryptography.SHA1Internal.FillBuff C# (CSharp) Method

FillBuff() private static method

private static FillBuff ( uint buff ) : void
buff uint
return void
		private static void FillBuff(uint[] buff)
		{
			uint val;
			for (int i = 16; i < 80; i += 8)
			{
				val = buff[i - 3] ^ buff[i - 8] ^ buff[i - 14] ^ buff[i - 16];
				buff[i] = (val << 1) | (val >> 31);

				val = buff[i - 2] ^ buff[i - 7] ^ buff[i - 13] ^ buff[i - 15];
				buff[i + 1] = (val << 1) | (val >> 31);

				val = buff[i - 1] ^ buff[i - 6] ^ buff[i - 12] ^ buff[i - 14];
				buff[i + 2] = (val << 1) | (val >> 31);

				val = buff[i + 0] ^ buff[i - 5] ^ buff[i - 11] ^ buff[i - 13];
				buff[i + 3] = (val << 1) | (val >> 31);

				val = buff[i + 1] ^ buff[i - 4] ^ buff[i - 10] ^ buff[i - 12];
				buff[i + 4] = (val << 1) | (val >> 31);

				val = buff[i + 2] ^ buff[i - 3] ^ buff[i - 9] ^ buff[i - 11];
				buff[i + 5] = (val << 1) | (val >> 31);

				val = buff[i + 3] ^ buff[i - 2] ^ buff[i - 8] ^ buff[i - 10];
				buff[i + 6] = (val << 1) | (val >> 31);

				val = buff[i + 4] ^ buff[i - 1] ^ buff[i - 7] ^ buff[i - 9];
				buff[i + 7] = (val << 1) | (val >> 31);
			}
		}
	

Usage Example

        private void ProcessBlock(byte[] inputBuffer, uint inputOffset)
        {
            this.count += 64UL;
            uint[] h     = this._H;
            uint[] array = this.buff;
            SHA1Internal.InitialiseBuff(array, inputBuffer, inputOffset);
            SHA1Internal.FillBuff(array);
            uint num  = h[0];
            uint num2 = h[1];
            uint num3 = h[2];
            uint num4 = h[3];
            uint num5 = h[4];
            int  i;

            for (i = 0; i < 20; i += 5)
            {
                num5 += (num << 5 | num >> 27) + (((num3 ^ num4) & num2) ^ num4) + 1518500249u + array[i];
                num2  = (num2 << 30 | num2 >> 2);
                num4 += (num5 << 5 | num5 >> 27) + (((num2 ^ num3) & num) ^ num3) + 1518500249u + array[i + 1];
                num   = (num << 30 | num >> 2);
                num3 += (num4 << 5 | num4 >> 27) + (((num ^ num2) & num5) ^ num2) + 1518500249u + array[i + 2];
                num5  = (num5 << 30 | num5 >> 2);
                num2 += (num3 << 5 | num3 >> 27) + (((num5 ^ num) & num4) ^ num) + 1518500249u + array[i + 3];
                num4  = (num4 << 30 | num4 >> 2);
                num  += (num2 << 5 | num2 >> 27) + (((num4 ^ num5) & num3) ^ num5) + 1518500249u + array[i + 4];
                num3  = (num3 << 30 | num3 >> 2);
            }
            while (i < 40)
            {
                num5 += (num << 5 | num >> 27) + (num2 ^ num3 ^ num4) + 1859775393u + array[i];
                num2  = (num2 << 30 | num2 >> 2);
                num4 += (num5 << 5 | num5 >> 27) + (num ^ num2 ^ num3) + 1859775393u + array[i + 1];
                num   = (num << 30 | num >> 2);
                num3 += (num4 << 5 | num4 >> 27) + (num5 ^ num ^ num2) + 1859775393u + array[i + 2];
                num5  = (num5 << 30 | num5 >> 2);
                num2 += (num3 << 5 | num3 >> 27) + (num4 ^ num5 ^ num) + 1859775393u + array[i + 3];
                num4  = (num4 << 30 | num4 >> 2);
                num  += (num2 << 5 | num2 >> 27) + (num3 ^ num4 ^ num5) + 1859775393u + array[i + 4];
                num3  = (num3 << 30 | num3 >> 2);
                i    += 5;
            }
            while (i < 60)
            {
                num5 += (num << 5 | num >> 27) + ((num2 & num3) | (num2 & num4) | (num3 & num4)) + 2400959708u + array[i];
                num2  = (num2 << 30 | num2 >> 2);
                num4 += (num5 << 5 | num5 >> 27) + ((num & num2) | (num & num3) | (num2 & num3)) + 2400959708u + array[i + 1];
                num   = (num << 30 | num >> 2);
                num3 += (num4 << 5 | num4 >> 27) + ((num5 & num) | (num5 & num2) | (num & num2)) + 2400959708u + array[i + 2];
                num5  = (num5 << 30 | num5 >> 2);
                num2 += (num3 << 5 | num3 >> 27) + ((num4 & num5) | (num4 & num) | (num5 & num)) + 2400959708u + array[i + 3];
                num4  = (num4 << 30 | num4 >> 2);
                num  += (num2 << 5 | num2 >> 27) + ((num3 & num4) | (num3 & num5) | (num4 & num5)) + 2400959708u + array[i + 4];
                num3  = (num3 << 30 | num3 >> 2);
                i    += 5;
            }
            while (i < 80)
            {
                num5 += (num << 5 | num >> 27) + (num2 ^ num3 ^ num4) + 3395469782u + array[i];
                num2  = (num2 << 30 | num2 >> 2);
                num4 += (num5 << 5 | num5 >> 27) + (num ^ num2 ^ num3) + 3395469782u + array[i + 1];
                num   = (num << 30 | num >> 2);
                num3 += (num4 << 5 | num4 >> 27) + (num5 ^ num ^ num2) + 3395469782u + array[i + 2];
                num5  = (num5 << 30 | num5 >> 2);
                num2 += (num3 << 5 | num3 >> 27) + (num4 ^ num5 ^ num) + 3395469782u + array[i + 3];
                num4  = (num4 << 30 | num4 >> 2);
                num  += (num2 << 5 | num2 >> 27) + (num3 ^ num4 ^ num5) + 3395469782u + array[i + 4];
                num3  = (num3 << 30 | num3 >> 2);
                i    += 5;
            }
            h[0] += num;
            h[1] += num2;
            h[2] += num3;
            h[3] += num4;
            h[4] += num5;
        }