private void Init()
{
if (this.key.Length != 16)
{
throw new ArgumentException("The key must be 128 bits long");
}
this.cnt = 0u;
uint[] array = new uint[1280];
for (int i = 0; i < 16; i++)
{
array[i >> 2] |= (uint)((uint)this.key[i] << 8 * (i & 3));
}
Array.Copy(array, 0, array, 4, 4);
int num = 0;
while (num < this.iv.Length && num < 16)
{
array[(num >> 2) + 8] |= (uint)((uint)this.iv[num] << 8 * (num & 3));
num++;
}
Array.Copy(array, 8, array, 12, 4);
for (uint num2 = 16u; num2 < 1280u; num2 += 1u)
{
array[(int)((UIntPtr)num2)] = HC128Engine.F2(array[(int)((UIntPtr)(num2 - 2u))]) + array[(int)((UIntPtr)(num2 - 7u))] + HC128Engine.F1(array[(int)((UIntPtr)(num2 - 15u))]) + array[(int)((UIntPtr)(num2 - 16u))] + num2;
}
Array.Copy(array, 256, this.p, 0, 512);
Array.Copy(array, 768, this.q, 0, 512);
for (int j = 0; j < 512; j++)
{
this.p[j] = this.Step();
}
for (int k = 0; k < 512; k++)
{
this.q[k] = this.Step();
}
this.cnt = 0u;
}