tthsum(1) generates or checks TTH message digests


tthsum [-bhmpvVw] [-c [file]] | [file...]


tthsum generates or checks TTH checksums (roots of the Tiger/THEX hash tree). The Merkle Hash Tree, invented by Ralph Merkle, is a hash construct that exhibits desirable properties for verifying the integrity of files and file subranges in an incremental or out-of-order fashion. tthsum uses the Tiger hash algorithm, by Ross Anderson and Eli Biham, for both the internal and the leaf nodes.

The specification of the THEX algorithm is at:

The specification of the Tiger hash algorithm is at:

Normally tthsum generates checksums of all files given to it as parameters and prints the checksums followed by the filenames. If, however, -c is specified, only one filename parameter is allowed. This file should contain checksums and filenames to which these checksums refer, and the files listed in that file are checked against the checksums listed there. See option -c for more information.

If no file is specified data will be read from standard input.


An md5sum compatibility option. It does absolutely nothing. (md5sum uses -b to treat binary files differently from texts files.)

Check tthsum of all files listed in file against the checksum listed in the same file. The actual format of that file is the same as output of tthsum. That is, each line in the file describes a file. A line looks like:


So, for example, if a file were created and its message digest calculated like so:

echo foo > tth-test-file; tthsum tth-test-file

tthsum would report:


See NOTES for more information on the digest file format.

Use mmap(2) instead of read(2) to read the contents of the files to hash. Normally, using read is cheaper. This all depends on system load, I/O speed, CPU speed, L1 and/or L2 cache size and whatnot.

Show the progress. Print the percentage of completeness while hashing on standard error. Prints file position instead of percentage when the file size is unknown.

Be verbose. Print filenames when checking (with -c).

Warn on improperly formatted lines when checking (with -c).

-h, -V
Print a small help text or the version, respectively, on standard out. If an unknown combination of options is encountered, the small help is printed on standard error and tthsum will return non-zero.


tthsum returns 0 if no error occurred or, when checking a digest, if at least one line is formatted properly and the TTHs of all properly formatted lines match. tthsum returns 2 if an unknown combination of options is encountered. In all other cases will tthsum return 1.


tthsum intentionally uses an interface identical to md5sum.

tthsum uses BASE32 encoding consisting of the following characters: ABCDEFGHIJKLMNOPQRSTUVWXYZ234567. It will accept lower case letters in the digest input as well.

tthsum does not accept long options such as --help.

A digest file format line looks like: <BASE32><SPACES><FILENAME><EOL>. BASE32 is a 39 character long BASE32 encoded string. SPACES is a set of two spaces (0x20). FILENAME is the name of the file, encoded in UTF8 and with all control characters (those below 0x20) encoded as \xNN or \C C-style escapes. (The backslash is escaped as \\ as well. On Windows, backslashes in paths will be translated to slashes for compatibility with real operating systems.) EOL may be CRLF (\r\n), just plain LF (\n) or even nothing at end-of-file.

If you see warnings about an improper locale setup, check your LANG and/or LC_CTYPE environment variables. If these are not set properly, tthsum cannot represent non-ASCII characters (those above 0x7F) in UTF8. See locale(1) for more information or try to set LC_CTYPE to e.g. "en_US".


Report bugs to <[email protected]>.


Copyright © 2009 Walter Doekes. License GPLv3+: GNU GPL version 3 or later <>
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.


tthsum and this manpage were written by Walter Doekes ([email protected]). The hashing code was copied directly from DC++, an open source peer-to-peer file sharing program by Jacek Sieka ([email protected]) who had based the hashing code on the one used in BCDC++ (a modified DC++) by Dustin Brody ([email protected]). After version 1.1.0, the hashing code from the Tiger hash authors is used instead, to support big endian architectures and to remove the need for C++ compilers and libraries. The md5sum manpage, written by Juho Vuori ([email protected]), was used as a template. This manpage was proofread by Dustin Brody.