internal void Read(byte[] cache) { this.Credentials.Clear(); this.Header.Clear(); using (var buffer = new NdrBuffer(cache, align: false)) { var magic = buffer.Read(1)[0]; if (magic != Magic) { throw new InvalidOperationException($"Unknown file format. Expected 0x{Magic}; Actual 0x{magic}."); } var version = buffer.Read(1)[0]; if (version != ExpectedVersion) { throw new InvalidOperationException($"Unknown file format version. Expected 0x{ExpectedVersion}; Actual 0x{version}."); } try { this.ReadHeader(buffer); this.DefaultPrincipalName = ReadPrincipal(buffer); this.ReadCredentials(buffer); } catch (ArgumentException) { throw new InvalidDataException($"The cache file appears corrupt around byte offset {buffer.Offset}"); } } }