private void refreshData(byte[] data) { byte[] ekdata = new byte[PKX.SIZE_4PARTY]; Array.Copy(data, 8, ekdata, 0, ekdata.Length); bool empty = ekdata.SequenceEqual(new byte[ekdata.Length]); PK = new PK4(empty ? ekdata : PKX.decryptArray45(ekdata)); Unknown = new byte[0x10]; Array.Copy(data, 0xF4, Unknown, 0, 0x10); RAW = data; }
public static void checkEncrypted(ref byte[] pkm) { int format = getPKMDataFormat(pkm); switch (format) { case 1: case 2: // no encryption return; case 3: if (pkm.Length == PKX.SIZE_3CSTORED || pkm.Length == PKX.SIZE_3XSTORED) { return; // no encryption for C/XD } ushort chk = 0; for (int i = 0x20; i < PKX.SIZE_3STORED; i += 2) { chk += BitConverter.ToUInt16(pkm, i); } if (chk != BitConverter.ToUInt16(pkm, 0x1C)) { pkm = PKX.decryptArray3(pkm); } return; case 4: case 5: if (BitConverter.ToUInt16(pkm, 4) != 0) // BK4 { return; } if (BitConverter.ToUInt32(pkm, 0x64) != 0) { pkm = PKX.decryptArray45(pkm); } return; case 6: case 7: if (BitConverter.ToUInt16(pkm, 0xC8) != 0 && BitConverter.ToUInt16(pkm, 0x58) != 0) { pkm = PKX.decryptArray(pkm); } return; default: return; // bad! } }
public override byte[] decryptPKM(byte[] data) { return(PKX.decryptArray45(data)); }