public Blowfish(byte[] key)
{
for (int i = 0, j = 0; i < 18; ++i)
{
uint a = key[j++ % key.Length];
uint b = key[j++ % key.Length];
uint c = key[j++ % key.Length];
uint d = key[j++ % key.Length];
lookupMfromP[i] ^= a << 24 | b << 16 | c << 8 | d;
}
uint l = 0, r = 0;
for (var i = 0; i < 18;)
{
Encrypt(ref l, ref r);
lookupMfromP[i++] = l;
lookupMfromP[i++] = r;
}
for (var i = 0; i < 4; ++i)
for (var j = 0; j < 256;)
{
Encrypt(ref l, ref r);
lookupMfromS[i, j++] = l;
lookupMfromS[i, j++] = r;
}
}