                 let dataStartIndex = entryInfo.blockStartIndex + 512
                 let dataEndIndex = dataStartIndex + entryInfo.size!
                 // Verify that data is not truncated.
+                // The data.startIndex inequality is strict since by this point at least one header (i.e. 512 bytes)
+                // has been processed. The data.endIndex inequality is strict since there must be a 1024 bytes-long EOF
+                // marker block which isn't included into any entry.
                 guard dataStartIndex > data.startIndex && dataEndIndex < data.endIndex
                     else { throw TarError.wrongField }
                 let entryData = data.subdata(in: dataStartIndex..<dataEndIndex)

     */
    public static func formatOf(container data: Data) throws -> Format {
        // TAR container should be at least 512 bytes long (when it contains only one header).
        guard data.count >= 512 else { throw TarError.tooSmallFileIsPassed }

        /// Object with input data which supports convenient work with bit shifts.
        var infoProvider = TarEntryInfoProvider(data)

     - Returns: Array of `TarEntryInfo`.
     */
    public static func info(container data: Data) throws -> [TarEntryInfo] {
        // TAR container should be at least 512 bytes long (when it contains only one header).
        guard data.count >= 512
            else { throw TarError.tooSmallFileIsPassed }

        /// Object with input data which supports convenient work with bit shifts.
        var infoProvider = TarEntryInfoProvider(data)
