/// <summary>Create a list that contains the origin of all bytes in the result file</summary> /// <param name="dataPacket">the data packet that makes up the result file</param> /// <param name="forensicLogType">the type of data being logged</param> internal void WriteDetailInformation(IDataPacket dataPacket, ForensicLogType forensicLogType) { _textWriter.WriteLine(); string sourceHeaderText; if (forensicLogType == ForensicLogType.CopiedData) { sourceHeaderText = "Build-up of resulting file:"; } else if (forensicLogType == ForensicLogType.ConvertedData) { sourceHeaderText = "Build-up of source data (before being converted by FFmpeg):"; } else { sourceHeaderText = string.Empty; } _textWriter.WriteLine(sourceHeaderText); _textWriter.WriteLine("From byte location:{0}To byte location:{1}Length:{2}Maps to source file(s):{3}From byte location:{4}To byte location:", SeparatorChar, SeparatorChar, SeparatorChar, SeparatorChar, SeparatorChar); for (long offset = 0L; offset < dataPacket.Length;) { IDataPacket subpacket = dataPacket.GetFragment(offset); _textWriter.WriteLine("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}", offset, SeparatorChar, offset + subpacket.Length, SeparatorChar, subpacket.Length, SeparatorChar, subpacket.InputFile.Name, SeparatorChar, subpacket.StartOffset, SeparatorChar, subpacket.EndOffset); offset += subpacket.Length; } }
/// <summary>Create a forensic integrity log.</summary> /// <remarks> /// The log contains: /// <list type="bullet"> /// <item>MD5 hashes of the all input files used.</item> /// <item>MD5 hash of result file.</item> /// <item>Detailed information about the source of each byte in the result file.</item> /// </list> /// </remarks> /// <param name="dataPacket">The data packet used to create the result file.</param> /// <param name="detectors">The metadata for the data packets</param> /// <param name="resultFile">The created result file.</param> /// <param name="stream">The stream to write the forensic integrity log information to.</param> public void Log(IDataPacket dataPacket, IEnumerable <IDetector> detectors, string resultFile, Stream stream, ForensicLogType forensicLogType) { PreConditions.Argument("dataPacket").Value(dataPacket).IsNotNull(); PreConditions.Argument("detectors").Value(detectors).IsNotNull().And.DoesNotContainNull(); PreConditions.Argument("resultFile").Value(resultFile).IsNotNull().And.IsNotEmpty(); PreConditions.Argument("stream").Value(stream).IsNotNull(); using (LogWriter logWriter = new LogWriter(stream, _projectManager.Project, _detectorFormatter)) { logWriter.WriteHeader(); logWriter.WriteUsedDetectors(detectors); logWriter.WriteSourceFileChecksum(dataPacket); logWriter.WriteResultFileChecksum(resultFile); logWriter.WriteDetailInformation(dataPacket, forensicLogType); } }