CHECKSUM Changelog

What's new in CHECKSUM 1.7.0.1

Aug 3, 2015
  • During verification, checksum can now skip checking files which appear to be unmodified, which is to say, it will perform verification operations only on files with a modified timestamp more recent than their recorded timestamp.
  • This is designed to be used along with the "w" switch, to update the hash and timestamp of a file or set of files you have /mindfully/ changed.
  • USE WITH CAUTION on volumes you know are free from corruption of any other kind! Using this switch combination inside a scheduled, automatic task could be a recipe for disaster.
  • I SAY AGAIN: Used incorrectly, "wm" can become a WMD!
  • NOTE: If you are logging *everything*, these entries will appear as "SKIPPED".
  • Fixed a bug where checksum could crash under certain conditions when using the search + verify feature searching for a file entry for which there exists no corresponding hash.

New in CHECKSUM 1.6.6.6 (Aug 3, 2015)

  • In addition to scanning .hash files, checksum will now also check legacy files of the current algorithm (.md5/.sha1/etc.) when performing hash search operations ("i" switch). e.g..
  • vi "C:\path\to\file\somewhere\file.txt"
  • Or scanning for a SHA1 hash (when MD5 is your default algorithm)..
  • vias "C:\path\to\file\with\sha1\somewhere\file.txt"
  • This only happens if a match wasn't found in any relevant .hash files.
  • If you were /not/ using the unified .hash extension, there is no change; checksum would be scanning your relevant .md5/.sha1/.b2 files, anyway.
  • VASTLY improved speeds when synchronizing hash files. I noticed that when syncing large hash files, checksum was taking an unacceptably long time (my new 1.2 million hashes test .hash file took over 12h, sorry about that!).
  • checksum will now synchronize HUGE .hash files in /minutes/.
  • That same 1.2 million hashes test file now syncs in under ten minutes on my lowly Celeron, including the time taken to scan the file system and extract and parse the hash data (adding a few dozen small files - obviously adding hashes for any large files would increase that).
  • Fixed an issue where large *.tar.md5 files (files with checksums concatenated to the end of them, usually tarred Android ROM files, though it is a neat idea I suspect could catch on for other file types) would cause checksum to run out of internal hash storage space. checksum should now correctly reject such a file.
  • Then I thought to myself.. Why not ADD support for these files?
  • I made it so.. Rather than reject such files, users of *.tar.md5 files can now have checksum do an integrity check of the *.tar archive using the stored MD5. There is a preference to enable treating *.tar.md5 files as "special", which is..
  • tar_md5_special=true
  • With this enabled (true), checksum will interrogate the final bytes of *.tar.md5 files for a corresponding hash. Such a file has the internal format:
  • e.g..
  • 923c5925c1b0b8694ea35db95e951cf5 recovery.tar
  • If the embedded within the *.tar.md5 matches the given *.tar.md5 file name, minus the ".md5" part of course, e.g. "recovery.tar.md5" >> (contains data+hash for) >> "recovery.tar"
  • checksum will pluck out the stored hash to compare against a hash of the tar data part of the file. If the original tar part of the file is intact, unchanged from when it was created, you get SUCCESS! as usual, and if not, you get CHANGED. Simple.
  • By the way, to make such a file do (in Linux/UNIX/Cygwin shell)..
  • # tar the file..
  • tar -H ustar -c recovery.img > recovery.tar
  • # concatenate the MD5 onto the end of the tar file..
  • md5sum -b recovery.tar >> recovery.tar
  • # rename to show change..
  • mv recovery.tar recovery.tar.md5
  • NOTE: NEVER change the name of your *.tar.md5 files, at least if you want checksum to verify them correctly. If you do do this and need to recover the original file name, drop the file into a (CAPABLE) text or hex editor and check out the last few bites, which will be the original name. Then simply add ".md5" to the end. Then leave it alone!
  • Added support for embedded hashes, in *any* file using the file name format: filename..ext, e.g. "RoboCop.sha1.mp4". Checksum will work out the hash type from whatever "pre-extension" you use. If you use the unified hash extension, checksum will use the default algorithm unless you specify otherwise, e.g..
  • v RoboCop.md5.mp4 >> Uses MD5
  • v RoboCop.sha1.mp4 >> Uses SHA1
  • v RoboCop.hash.mp4 >> Uses MD5
  • vas RoboCop.hash.mp4 >> Uses SHA1
  • Unlike *.tar.md5 files, there is no support for verifying multiple embedded hashes. You must verify them individually - the same way you make them, at least for now. They can still be hashed along with your regular files, of course.
  • To force verification of any file, hold the Ctrl key down when selecting the checksum item from Explorer's context menu.
  • If you want to play with this, remember that some files will NOT work correctly once you concatenate a hash onto the end of them. Media files and archives are usually fine.
  • Faster file system search routines. This will impact the file search phase of checksum's operations, especially on LARGE file systems.
  • Improved speed when performing hash /search/ operations on large hash files. For huge hash files the time difference will be dramatic. Also, checksum now uses a 1/10th of the memory for searching.
  • Improved System Tray tips and progress windoid information.
  • With some internal rewiring, I increased the previous limit of 2,396,744 hashes per .hash file. The limit is now effectively around 16,777,215 hashes per file; what it was supposed to be. I say /around/ because although unlikely, if you have a hash file with 16,777,215 hashes + info lines + heaps of manually-added comments, during verification checksum will flag the file as being too big to handle.
  • checksum will now move its one-shot option dialogs on-screen if they are set (by the user) to appear off-screen, such as when you keep them in the far corner of your desktop and then login via remote desktop on a smaller device, such as a laptop or tablet.
  • Fixed memory spike on initial .hash file read, specifically when checksum was counting the number of lines in the hash file.
  • Fixed an issue where the logging level wasn't being reset correctly during verify operations, resulting in erroneous logging of DELETED files, but only after CORRUPT or CHANGED files had been discovered.
  • Fixed handling of ANSI MD5 files with foreign file names in them (which I broke in the last version). These were being treated as UTF-8 and the verification would result in apparently MISSING files. checksum will once again automatically determine the file's encoding.
  • By the way, I DO NOT recommend you use any ANSI-only utility to create MD5 sums of directories of files with foreign names. Even using extended locales, your program will simply miss files. Of my test directory of 58 foreign-named files (including but not limited to Russian, Chinese, Urdu, Greek, Icelandic, Swedish, Arabic, and more, as well as a selection of just wild UNICODE character names), other apps will fail on at least 30 of the file names. With the default UTF-8 encoding, checksum can handle everything.
  • Simple Checksum 0.9.3.1:
  • Simple Checksum will now disable checksum's beep for the first half of a folder compare operation. If you have beeps enabled in checksum you will hear that at the end of the completed folder compare.

New in CHECKSUM 1.6.0.8 (Aug 3, 2015)

  • Put the search+verify option (one-shot options dialog) into a group (by itself!), to be more in line with the other options.
  • The text in the notification at the end of the verify dialog now correctly states the number of hashes checked, as opposed to the number of files - there may be multiple hashes for the same file, you see.
  • Added information about creating task folders to the task name input of the Task Scheduler Wizard. By default, tasks go in a "checksum" folder, but if you can specify your own (using: folder\task-name).
  • UPDATED and DELETED events are now logged.
  • Updated the CSS files to cover the above (as well as BAD files)
  • Fixed search+verify routines to correctly handle all possible path variations.
  • Fixed the wonky behaviour of the verify options log input on Windows 8. The input should fly out when the mouse is over it, and stay that way until the mouse leaves the control. Now it does.
  • Fixed a vermicious bug where if you exited using the ToolTip menu at *just* the right time whilst synchronizing hashes, you would get a hash added to a file where one already existed, creating a duplicate hash.
  • checksum will now respect a blank "nameless_name" preference. Previously it would always insert the default value, which is "nameless".
  • Fixed a bug in the plain text logging (no one uses this, right!) where logs were occasionally being created even when there were no errors.

New in CHECKSUM 1.6.0.6 (Aug 3, 2015)

  • Mail Notification on hash failures.
  • Yes! checksum can mail you when it detects errors in your files; especially handy for scheduled tasks running while you are away or otherwise engaged.
  • Your mail preferences can be edited from a cute GUI available from checksum's System Tray menu (while one-shot verify options window is open). It can do CC, BCC, SSL, single and multiple file attachments, mail priority, all the usual goodies. (it uses the built-in Windows CDO mail sending functions)
  • I've tested it successfully with a few outgoing servers including gmx and Gmail (both using SSL on the standard port: 465) as well as my own local Linux sendmail.
  • To attach files, you can either enter the full path of the file(s) into the attachment input (separate multiple files with semi-colons ";"), or else click the label "Attachments" to browse for files (which will be appended to your current input), or else drag & drop files directly onto the input (which replaces the current input).
  • NOTE: You can use the "@log" token (no quotes) to attach the final log to the email - most useful! e.g..
  • @log;C:\some\other\file.txt;C:\and\another.png
  • Attaching your log file, as well as being extremely useful, has the added bonus of (assuming you have inline attachments and HTML enabled in your mail client) making the entire mail look cool like a checksum log!
  • Finally, you can also save mail settings as presets for later recall. This makes it easy to switch between mail servers, if required.
  • The Mail-On-Fail dialog is also resizable, like the create options, for the same (accessibility) reasons, and with corresponding checksum.ini hacks available for permanent resizing (these are the minimum values)..
  • mail_options_width=265
  • mail_options_height=360
  • BAD files (those which appear to be .hash files, but are not - most likely corrupted) will now be logged as well as reported. BAD files can be sign of disk corruption.
  • Even faster startup!
  • The final total number of files processed is now also shown in the final dialog during verify operations as well as creation jobs.
  • During search+verify operations, if checksum discovers a CHANGED file, it will now update the hash (if you have this behaviour enabled - by using the "w" switch). Previously the "w" switch had no effect in this scenario.
  • I have added an option for search+verify to the one-shot verify options. It's kinda thrown in for now, until I can get around to re-organising that window. But it works!
  • If you have open_log_folder ("g" switch) set during verification and there are hash failures and the log folder is /already/ open on your desktop /somewhere/, checksum will bring it to the front.
  • Fixed a bug where a couple of the verify switches were not translating into the checked items in the one-shot verify options.
  • Fixed the bug in the disable edit ini and custom preamble not being available to registered users.
  • Fixed a bug in the relative and fall-back logging locations. If a blank log location is entered, the log will now appear in the top folder checked, as expected. And if that is not possible, it will fall-back to your desktop (and now with a file extension, as expected!). Almost no one uses this (because the checksum dedicated log folder is such a good idea!), which is how it escaped my attention so long.

New in CHECKSUM 1.5.8.4 (Aug 3, 2015)

  • Faster string search routines (now almost twice as fast). This impacts hash synchronization, checking files from the list of existing hashes. I have tested the new routines against a range of strange foreign languages and Unicode characters with 100% success.
  • Fixed recently introduced sync issue when using absolute paths inside root hashes. This was leading to duplicate hash entries.
  • Fixed issue with hash comments not respecting the always_store_unc pref (they were using UNC-style paths even when this was disabled - it caused no issue, but looked incongruous).
  • Fixed a bug in applying unified extension to multiple legacy hash files. This almost never happens, but if you happen to have .md5/.sha1/.blake2 hash files for a file and applied a unified extension, hashes for second and subsequent algorithms were being re-calculated.

New in CHECKSUM 1.5.7.0 (Aug 3, 2015)

  • Added search + verify command to checksum's default installed Explorer context commands. It's that handy!
  • If you want this NOW, either uninstall+reinstall checksum (all your settings will remain intact) or else merge the sample registry file
  • Directory Exclude Masks. You can now specify one or more directories which you would like to exclude from the hash creation process, using standard file masks (?,*). The "x" switch, followed by a set of exclude masks in braces, enables this functionality. Separate individual masks with a comma.
  • For example, you want to create a root hash, but not hash any directories with a name that begin with "foo", or ends with "bar", or starts with "baz" AND ends "qux", do..
  • checksum.exe cr1x(foo*,*bar,baz*qux) "D:\MyDir"
  • Fixed long path handling in search+verify function - Of course Explorer is sending short paths.

New in CHECKSUM 1.5.6.3 (Aug 3, 2015)

  • checksum will now post the path that was hashed/verified in the final tooltip, in case you forgot what it was you were hashing, e.g..
  • checksum completed verifying: e:\music\jazz\ in 3.55 seconds.. [100% OK]
  • Added new method (actually, the original method!) for testing writeability of directories. Normally we use the most accurate method, which is to write an actual test file to the directory. However, this will also change the "last modified" timestamp on that directory.
  • If you would prefer this to /not/ happen, you can do (in checksum.ini)..
  • relaxed_write_test=true
  • which will instead rely on the system's "read-only" flag for the directory. This works in most ordinary scenarios. However if, you ever get a "..having problems creating a checksum file" error, set this to false and try again!
  • Added Individual file verification search feature:
  • This enables you to verify a single file, anywhere in your system, /from/ anywhere in your system, regardless of where its associated .hash file is in the file tree.
  • This is extremely useful when you want to verify a single file but don't have an individual .hash for it, especially when the entry is inside a .hash file with thousands or millions of other entries, or you aren't sure exactly which .hash file contains the entry.
  • Normally, for verification you feed checksum .hash (or .md5, whatever) files and it scans them looking for matching files to hash. Using /this/ method, you feed checksum a regular file path and it scans your .hash files looking for a matching hash entry!
  • checksum will search up the tree, first looking for matching individual .hash files, and then folder hashes, all the way up to the root of the volume until it finds one containing a hash for your file, at which point it will verify that one hash and return the result.
  • The final dialog will also tell you *which* .hash file contained the entry for your chosen file.
  • You can enable this operation by using an "i" on the command-line, think "individual" file verification, or perhaps "Inverted operation"! e.g.. checksum.exe vi "C:\some\path\to\file.ext"
  • This works best as an Explorer context command. Future versions will have this built-in to the installer setup.

New in CHECKSUM 1.5.4.4 (Aug 3, 2015)

  • Exit command:
  • checksum can now launch another program/process/task on completion of its job.
  • NOTE: you can use @tokens in this setting, including the new @exit token, which will transform into checksum's exit code, to pass to the program..
  • exit_command=c:\path\to\my\app.exe /foo @exit
  • There is also a special @fullpath token which you can use to insert the full path of the item that was originally sent to checksum, and @fullpathnounc, which does the same thing, except the path will NOT be a UNC-style path, e.g..
  • @fullpath = \\?\C:\path\to\my\stuff
  • @fullpathnounc = C:\path\to\my\stuff
  • FYI, using the @item token would get you "stuff" in this example.
  • You can enable processing of the exit command by either setting..
  • do_exit_command=true
  • .. in your ini file, or by passing the "0" switch on your command-line (zero, no quotes - think standard exit code). If it is enabled in your ini, you can temporarily disable it by passing "-0".
  • Custom blake2 extension:
  • You might prefer "b2" or "blake2s" or something else. Simply set the blake_name preference..
  • blake_name=blake2
  • Added count to final dialog, so you always know exactly how many files were hashed at-a-glance.
  • Improved responsiveness of initial HotKey modifiers (Shift & Ctrl) so that one should only need to hold them down momentarily, as opposed to waiting for the options dialog (for example) to appear. Most people will probably not notice any difference.
  • Fixed an issue which caused checksum to crash when the (HUGE!) max folders limit is reached. Of course, you could increase this in your checksum.ini, but still, it wasn't being handled. checksum will now automatically increase the folder limit if required.
  • Removed Max Folders preference (due to above - new automatic limit).
  • The "checksum was given nothing to do" dialog has been made *much* smaller and now always opens a web page in your browser with more help than can be fit into a dialog window. (it tells you it has done this).
  • With the advent of the new startup command facility (v1.5.2.0+), I expect less people will be seeing that dialog, anyway.

New in CHECKSUM 1.5.3.0 (Aug 3, 2015)

  • Task Scheduler:
  • You can now create basic tasks for your system scheduler, to perform checksum jobs on a schedule. Handy for hashing your morning torrent downloads, weekly verifying your backups and much more.
  • A "wizard" will ask you a few questions about the task, user name, time and so on, and then pop open the options dialog (create or verify, depending on the task), where you can set your options for the scheduled task.
  • You can also have schedule setup as your default startup command
  • startup_command=schedule
  • You can now get to the "Edit Prefs (ini)" tray menu option when checksum is started with nothing to do.

New in CHECKSUM 1.5.2.0 (Aug 3, 2015)

  • Custom Startup Command:
  • When checksum is launched with nothing to do, rather than have checksum
  • display the "Nothing to do!" dialog, you can have it do something
  • /else/. This might be a default checksum command that you use a lot, or another program, or something else. e.g.
  • startup_command=simple checksum.exe
  • startup_command=c:\path\to\some\program.exe /foo /bar
  • startup_command=c:\path\to\my editors\editor.exe /open "i:\my\document.doc"
  • startup_command=c:\some app.exe c:\some documents\document.txt
  • For checksum commands, send your regular command-line after a "checksum" flag; the word "checksum", with a pipe character after it, e.g..
  • startup_command=checksum|crtbim(movies) "W:\Completed Torrents"
  • And checksum will launch itself with the specified command-line. Simple.
  • If you use something like
  • startup_command=checksum|cor "C:\"
  • Clicking on checkum.exe (or a shortcut to it) will startup checksum with the one-shot creatino options dialog open, so it seems like you are running a "regular" app! You can drag and drop in a folder, go for it.
  • You can have checksum jump straight to the (almost) hidden System Info Box.
  • startup_command=checksum|SysInfo

New in CHECKSUM 1.4.5.0 (Aug 6, 2014)

  • When queueing multiple items in Explorer with the key held down, checksum will now apply whatever options you set for the /first/ item to the /entire/ queue. If you would prefer to have the options dialog pop up for each item (the old behaviour), set this new preference..
  • apply_options_to_queue=false
  • When set to true (the default), checksum will also automatically check the "quiet operation" checkbox for you (if quiet operation is not already enabled), to prevent multiple final dialogs (if enabled) from popping up; assuming you want minimal interaction with the jobs. Of course, you can deselect this if you really want to see (and click!) /all/ the final dialogs.
  • checksum will now check how much free space is left on the target drive before beginning to write a hash file. If it estimates that the drive will run out of space before completion, it will halt with an error to that effect before it begins writing hashes.
  • Note: checksum will err /slightly/ on the side of caution in its calculations.
  • When creating root hash files with absolute paths, you can now choose to either always store UNC-style paths in your .hash file (the default) or not. If you set..
  • always_store_unc=false
  • .. checksum will use old-style paths for short paths and switch to UNC-style paths for long paths (that is, paths with more than 259 actual characters).
  • Note: checksum works with UNC-style paths internally so setting this to true will be slightly (microseconds) faster when writing each hash.
  • The tray ToolTip will now display some basic information about what checksum is doing, for those that prefer to run with the ToolTip Windoid disabled (which is faster when dealing with lots of small files).
  • Optimized the non-hash file test and hash file line counting routines. Every millisecond counts!
  • Fixed an issue where dropping multiple files onto checksum's one-shot create options dialog input where one or more of the files had no extension would produce an incorrect entry in the masks list, i.e. "*.".
  • Fixed a bug where choosing to show absolute paths in root .hash files created from the root of a drive would not show their UNC-style prefix. checksum can handle this just fine, but it was inconsistent with absolute path root hashes produced from some path deeper inside the drive (which do show the UNC-style prefix). Also, other hashing apps would most likely choke on long path with no UNC prefix, that is, if there were any other hashing apps that could handle long paths to begin with!
  • Fixed a bug in the show_unc_paths preference, which was being partly ignored when set to true.
  • Fixed a bug in recognizing single "piped" hashes with no line-breaks.
  • Fixed a bug where selecting multiple files to hash directly after an upgrade could scramble checksum's ini file.
  • Fixed a bug in the version checking routines - unless you had already set the interval (in the release version or manually) you would never get the option to do so!