/// <summary> /// Encrypts the <see cref="Data"/> according to the <see cref="Type"/> and <see cref="SubType"/>. /// </summary> public void WriteBlock(BinaryWriter bw) { var xk = new SCXorShift32(Key); bw.Write(Key); bw.Write((byte)((byte)Type ^ xk.Next())); if (Type == SCTypeCode.Object) { bw.Write((uint)Data.Length ^ xk.Next32()); } else if (Type == SCTypeCode.Array) { var entries = (uint)(Data.Length / SubType.GetTypeSize()); bw.Write(entries ^ xk.Next32()); bw.Write((byte)((byte)SubType ^ xk.Next())); } foreach (var b in Data) { bw.Write((byte)(b ^ xk.Next())); } }