public Firmware(byte[] key) { Contract.Requires<ArgumentNullException>(key != null); Contract.Requires<ArgumentException>(key.Length == 32); var memoryStream = new MemoryStream(new byte[65600]); memoryStream.Seek(64, SeekOrigin.Begin); Contract.Assume(memoryStream.CanSeek); Contract.Assume(memoryStream.Length >= 64); this.stream = new FirmwareStream(memoryStream, key, 64, false); }
public Firmware(Stream stream, bool leaveOpen) { Contract.Requires<ArgumentNullException>(stream != null); Contract.Requires<ArgumentException>(stream.CanSeek); Contract.Requires<ArgumentException>(stream.Length >= 64); var key = new byte[32]; Contract.Assume(HeaderKey.Length == 32); using (var headerStream = new FirmwareStream(stream, HeaderKey, 32)) { headerStream.Seek(0, SeekOrigin.Begin); headerStream.Read(key, 0, 32); } Contract.Assume(stream.Length >= 64); this.stream = new FirmwareStream(stream, key, 64, leaveOpen); }
public void UpdateHeader() { if (this.stream != null && this.stream.CanWrite && this.stream.CanSeek) { this.BaseStream.Seek(0, SeekOrigin.Begin); this.BaseStream.Write(HeaderControlBits, 0, HeaderControlBits.Length); this.BaseStream.Write(new byte[7], 0, 7); var checksum = this.Checksum; this.BaseStream.Seek(16, SeekOrigin.Begin); this.BaseStream.Write(BitConverter.GetBytes(checksum), 0, 4); this.BaseStream.Write(new byte[12], 0, 12); Contract.Assume(HeaderKey.Length == 32); Contract.Assume(this.BaseStream.CanSeek); using (var headerStream = new FirmwareStream(this.BaseStream, HeaderKey)) { var key = this.stream.GetKey(); headerStream.Write(key, 0, key.Length); } } }