Thanks to those who have been testing the first beta-release of Dintch, my free utility for tagging files with their SHA-256 digests so their integrity can be checked. I’m delighted to offer a new beta, which should run on all versions of macOS from El Capitan to Catalina. It has other major improvements too, and should be noticeably faster.
The idea behind Dintch is simple: it does two tasks. The first is to scan a folder containing files and other folders, and for each file it calculates its SHA-256 digest, a ‘checksum’ for that file’s data. It then saves that digest to the file as an extended attribute, which remains with that file (almost) wherever it goes.
Then when you want to check whether those files have changed, you can scan the same folder using Dintch. It then looks at each file to see if it has a saved digest; if it does, it calculates the current digest, compares it with the saved value, and reports if that has changed.
Once a file has been tagged with its digest by Dintch, you can copy and move it around, and the digest remains attached. There are a few things which remove it, but it even survives transit through iCloud. You can therefore always check its integrity, or write a fresh digest to start again if you wish.
As some testers have noticed, when Dintch tags a file, the file system considers that to have been changed. Freshly tagged files will therefore normally be included in your next backup, so if you decide to tag everything on a 1 TB disk, your next backup is going to be very large indeed. This isn’t a bug, it’s expected behaviour. Trying to handle this any other way renders the tagging process a waste of time, as you can’t rely on the digest to reflect the state of the file at any particular moment.
In addition to running (I hope) in earlier versions of macOS, the following are the main changes in this second beta-release:
- Saved digests should be fully compatible across different versions of macOS. This saves you having to re-tag every file when you update/upgrade macOS, or copy a tagged file to a different Mac.
- Reports for each scan are now more detailed, and in default mode include a summary of the number of files checked, how many differed from their saved digests, and how many had no digest available.
- You can now set custom buffer sizes for digest calculation. This leads to substantial performance improvements, as shown below. The buffer size is saved to Dintch’s preference settings, and used the next time you open the app.
- I have changed the # sign used on the tag button.
When Dintch calculates a digest value, it can’t of course read the whole of every file into memory. Instead it streams the file into a buffer, and calculates using the contents of the buffer, repeating until it has obtained a digest for the whole file. For each given file size, there’s an optimum buffer size which makes this process work quickest. This version of Dintch allows you to set that buffer size, in KB and MB, over the range 1 KB to 1024 MB (= 1 GB).
My benchmark test, of 5361 files totalling 18.5 GB, takes anything from 50-82 seconds to check the entire contents depending on the buffer size set. Here are sample results:
- 1 KB buffer takes 82 sec, which is 225 MB/s
- 512 KB buffer takes 50 sec, which is 370 MB/s
- 1 MB buffer takes 54 sec, which is 343 MB/s
- 512 MB buffer takes 61 sec, which is 303 MB/s.
The average size of those files is 3.5 MB, and the optimum buffer size is around 512 KB. Your mileage will vary, according to the sizes of the files you are tagging and checking.
My aim now is to do a little more performance tuning, and to fix any remaining bugs. If anyone has any feature requests for the first release version, please make them now. I am not even going to look at command tools, Finder Quick Actions or Services, or other ways of presenting the same features in convenient packages until this basic app is of release quality. That’s my top priority for now.