uint[] DeriveKey() { uint[] dst = new uint[0x10], src = new uint[0x10]; for (int i = 0; i < 0x10; i++) { dst[i] = v; src[i] = x; z = (x >> 5) | (x << 27); x = (c >> 3) | (c << 29); c = (v >> 7) | (v << 25); v = (z >> 11) | (z << 21); } return(deriver.DeriveKey(dst, src)); }
uint[] DeriveKey() { uint[] dst = new uint[0x10], src = new uint[0x10]; for (int i = 0; i < 0x10; i++) { dst[i] = mut4; src[i] = mut2; mut1 = (mut2 >> 5) | (mut2 << 27); mut2 = (mut3 >> 3) | (mut3 << 29); mut3 = (mut4 >> 7) | (mut4 << 25); mut4 = (mut1 >> 11) | (mut1 << 21); } return(deriver.DeriveKey(dst, src)); }
uint[] DeriveKey() { uint[] dst = new uint[0x10], src = new uint[0x10]; for (int i = 0; i < 0x10; i++) { dst[i] = v; src[i] = x; z = (x >> 7) | (x << 25); x = (c >> 2) | (c << 30); c = (v >> 6) | (v << 24); v = (z >> 12) | (z << 23); } return(deriver.DeriveKey(dst, src)); }
public byte[] Encrypt(ICompressionService compress, byte[] data, uint seed, Action <double> progressFunc) { data = (byte[])data.Clone(); var dst = new uint[0x10]; var src = new uint[0x10]; ulong state = seed; for (var i = 0; i < 0x10; i++) { state = (state * state) % 0x143fc089; src[i] = (uint)state; dst[i] = (uint)((state * state) % 0x444d56fb); } var key = Deriver.DeriveKey(dst, src); var z = (uint)(state % 0x8a5cb7); for (var i = 0; i < data.Length; i++) { data[i] ^= (byte)state; if ((i & 0xff) == 0) { state = (state * state) % 0x8a5cb7; } } data = compress.Compress(data, progressFunc); Array.Resize(ref data, (data.Length + 3) & ~3); var encryptedData = new byte[data.Length]; var keyIndex = 0; for (var i = 0; i < data.Length; i += 4) { var datum = (uint)(data[i + 0] | (data[i + 1] << 8) | (data[i + 2] << 16) | (data[i + 3] << 24)); var encrypted = datum ^ key[keyIndex & 0xf]; key[keyIndex & 0xf] = (key[keyIndex & 0xf] ^ datum) + 0x3ddb2819; encryptedData[i + 0] = (byte)(encrypted >> 0); encryptedData[i + 1] = (byte)(encrypted >> 8); encryptedData[i + 2] = (byte)(encrypted >> 16); encryptedData[i + 3] = (byte)(encrypted >> 24); keyIndex++; } return(encryptedData); }