RotateRight() приватный статический Метод

private static RotateRight ( uint x, int bits ) : uint
x uint
bits int
Результат uint
Пример #1
0
 private void Init()
 {
     if (this.key.Length != 32 && this.key.Length != 16)
     {
         throw new ArgumentException("The key must be 128/256 bits long");
     }
     if (this.iv.Length < 16)
     {
         throw new ArgumentException("The IV must be at least 128 bits long");
     }
     if (this.key.Length != 32)
     {
         byte[] destinationArray = new byte[32];
         Array.Copy(this.key, 0, destinationArray, 0, this.key.Length);
         Array.Copy(this.key, 0, destinationArray, 16, this.key.Length);
         this.key = destinationArray;
     }
     if (this.iv.Length < 32)
     {
         byte[] array = new byte[32];
         Array.Copy(this.iv, 0, array, 0, this.iv.Length);
         Array.Copy(this.iv, 0, array, this.iv.Length, array.Length - this.iv.Length);
         this.iv = array;
     }
     this.cnt = 0u;
     uint[] array2 = new uint[2560];
     for (int i = 0; i < 32; i++)
     {
         array2[i >> 2] |= (uint)((uint)this.key[i] << 8 * (i & 3));
     }
     for (int j = 0; j < 32; j++)
     {
         array2[(j >> 2) + 8] |= (uint)((uint)this.iv[j] << 8 * (j & 3));
     }
     for (uint num = 16u; num < 2560u; num += 1u)
     {
         uint num2 = array2[(int)((UIntPtr)(num - 2u))];
         uint num3 = array2[(int)((UIntPtr)(num - 15u))];
         array2[(int)((UIntPtr)num)] = (HC256Engine.RotateRight(num2, 17) ^ HC256Engine.RotateRight(num2, 19) ^ num2 >> 10) + array2[(int)((UIntPtr)(num - 7u))] + (HC256Engine.RotateRight(num3, 7) ^ HC256Engine.RotateRight(num3, 18) ^ num3 >> 3) + array2[(int)((UIntPtr)(num - 16u))] + num;
     }
     Array.Copy(array2, 512, this.p, 0, 1024);
     Array.Copy(array2, 1536, this.q, 0, 1024);
     for (int k = 0; k < 4096; k++)
     {
         this.Step();
     }
     this.cnt = 0u;
 }
Пример #2
0
        private uint Step()
        {
            uint num = this.cnt & 1023u;
            uint result;

            if (this.cnt < 1024u)
            {
                uint num2 = this.p[(int)((UIntPtr)(num - 3u & 1023u))];
                uint num3 = this.p[(int)((UIntPtr)(num - 1023u & 1023u))];
                this.p[(int)((UIntPtr)num)] += this.p[(int)((UIntPtr)(num - 10u & 1023u))] + (HC256Engine.RotateRight(num2, 10) ^ HC256Engine.RotateRight(num3, 23)) + this.q[(int)((UIntPtr)((num2 ^ num3) & 1023u))];
                num2   = this.p[(int)((UIntPtr)(num - 12u & 1023u))];
                result = (this.q[(int)((UIntPtr)(num2 & 255u))] + this.q[(int)((UIntPtr)((num2 >> 8 & 255u) + 256u))] + this.q[(int)((UIntPtr)((num2 >> 16 & 255u) + 512u))] + this.q[(int)((UIntPtr)((num2 >> 24 & 255u) + 768u))] ^ this.p[(int)((UIntPtr)num)]);
            }
            else
            {
                uint num4 = this.q[(int)((UIntPtr)(num - 3u & 1023u))];
                uint num5 = this.q[(int)((UIntPtr)(num - 1023u & 1023u))];
                this.q[(int)((UIntPtr)num)] += this.q[(int)((UIntPtr)(num - 10u & 1023u))] + (HC256Engine.RotateRight(num4, 10) ^ HC256Engine.RotateRight(num5, 23)) + this.p[(int)((UIntPtr)((num4 ^ num5) & 1023u))];
                num4   = this.q[(int)((UIntPtr)(num - 12u & 1023u))];
                result = (this.p[(int)((UIntPtr)(num4 & 255u))] + this.p[(int)((UIntPtr)((num4 >> 8 & 255u) + 256u))] + this.p[(int)((UIntPtr)((num4 >> 16 & 255u) + 512u))] + this.p[(int)((UIntPtr)((num4 >> 24 & 255u) + 768u))] ^ this.q[(int)((UIntPtr)num)]);
            }
            this.cnt = (this.cnt + 1u & 2047u);
            return(result);
        }