public int EncryptBlock(
byte[] input,
int inOff,
byte[] outBytes,
int outOff)
{
int w1 = (input[inOff + 0] << 8) + (input[inOff + 1] & 0xff);
int w2 = (input[inOff + 2] << 8) + (input[inOff + 3] & 0xff);
int w3 = (input[inOff + 4] << 8) + (input[inOff + 5] & 0xff);
int w4 = (input[inOff + 6] << 8) + (input[inOff + 7] & 0xff);
int k = 0;
for (int t = 0; t < 2; t++)
{
for(int i = 0; i < 8; i++)
{
int tmp = w4;
w4 = w3;
w3 = w2;
w2 = G(k, w1);
w1 = w2 ^ tmp ^ (k + 1);
k++;
}
for(int i = 0; i < 8; i++)
{
int tmp = w4;
w4 = w3;
w3 = w1 ^ w2 ^ (k + 1);
w2 = G(k, w1);
w1 = tmp;
k++;
}
}
outBytes[outOff + 0] = (byte)((w1 >> 8));
outBytes[outOff + 1] = (byte)(w1);
outBytes[outOff + 2] = (byte)((w2 >> 8));
outBytes[outOff + 3] = (byte)(w2);
outBytes[outOff + 4] = (byte)((w3 >> 8));
outBytes[outOff + 5] = (byte)(w3);
outBytes[outOff + 6] = (byte)((w4 >> 8));
outBytes[outOff + 7] = (byte)(w4);
return BLOCK_SIZE;
}