Release Notes
Jacksum Next Release TBD
- Updated documentation
- added docs/USE_CASES.md and its German translation docs/USE_CASES_de.md, a task oriented
cookbook: while docs/EXAMPLES.md is organized by feature ("what does this option do"),
USE_CASES.md is organized by goal ("I want to solve this problem")
Jacksum 4.0.0, August 22, 2026
Jacksum 3.7.0, Aug 26, 2023
-
new features:
- added HMAC support
- extended option -a to understand HMAC definitions, including optional truncations
- added option -k, and alias --key to specify the secret for HMACs
- added option --hmacs to print all hash functions that work with HMAC
- allowed option --info for gathering HMAC info to print HMAC parameters such as
- the underlying cryptographic hash
- a specified truncation in both bits and bytes
- how many bits a truncated length should have at least
- whether a specified truncated length follows the RFC recommendation
- how many bytes a specified key should have at least
- whether the specified key follows the RFC recommendation wrt key length
- whether the specified key will be hashed
- added string hashing support
- added option --string-list to calculate hash values from strings stored in text files
- added options --string-list-charset, and alias --charset-string-list
- added option --ignore-empty-lines
- added formatter alias #MESSAGE for #FILENAME
- added console input mode
- added password mode, and readline mode for option -q (and -k)
- added option --charset-console, and alias --console-charset
- added encodings
- added encoding Z85 for option -E (without a limit on the length of the input)
- added support for oct, Base32, Base32hex, Base64, Base64url, and Z85 to option -q
- added option --output-file-replace-tokens
-
bug fixes:
- NPE if filename is null and -F is set (e.g. 'jacksum -a none -F "#SEQUENCE" -q txt:')
- NPE can occur if both -a none and -E without -F have been set
- #FILENAME is not replaced in if both "-F " and "-q file:" have been used
- aliases blake2sp-256 and blake2bp-512 are not accessible
- regression: "jacksum -a all:blake -l" returns "blake2sp-256 is an unknown algorithm" due to missing alias
- crc32_mpeg2 didn't reveal the poly representations by specifying --info
-
improved performance:
- performance for algorithm info output (-a [--list] --info)
-
updated documentation:
- added description and encoding tables for the most common encodings (see "jacksum -h -E")
Jacksum 3.6.0, April 16, 2023
-
new algorithms:
- added all finalists that support hashing of the NIST Lightweight Cryptography competition (2019–2023)
from a bouncy castle pre-release:
- added blake2sp, and blake2bp (issue #4) - the Java implementation (fixed width single threaded) is done by
pre-release bouncy castle code with a contribution fix for blake2sp by jonelo
(https://github.com/bcgit/bc-java/issues/1363 and 1364)
- added 32 bit PRNG based checksums which are known from Solaris 11 Express, OmniOS, SmartOS, and Tribblix:
- PRNG hash
- AST strsum PRNG hash
- alternate implementation for blake3 provided by bouncy castle, the existing primary implementation still remains the
primary, because it is slightly faster.
-
updates:
- significant performance improvement for all FNV-0/FNV-1/FNV-1a with a width of 64 bits
- minor performance improvements for all FNV-0/FNV-1/FNV-1a with a bit width > 64 bits
- documentation: added OpenIndiana to the compatibility lists.
-
bug fixes:
- CommonHashStatistics.java was not added to the repo which avoided the compilation
- fixed the grammar bugs in the manpage by using OpenAI's grammar correction
Jacksum 3.5.0, Jan 7, 2023
-
new algorithms:
- replaced own CRC engine by the BSD 3-clause licenced CRC engine java-crc 1.0.3 from S&K Software Development Ltd.,
New Zealand (https://github.com/snksoft/java-crc) in order to benefit from the extra [1..7] CRC bit widths.
- added CRC-82/DARC with aliases crc82, crc82_darc, crc-82, crc-82_darc
(translated to Java from C-code that was written by Mark Adler)
- added PHP's variants on Tiger called "tiger192,4", "tiger160,4", and "tiger128,4"
by adjusting Bouncy Castle's TigerDigest slightly.
- added legacy sum64
-
new features:
- make option --file-list recognizing GNU filename escaping
- added "files-only" style with GNU filename escaping feature enabled in order to generate file lists
that can be fed to Jacksum again
- added "hexhashes-only" style to read and write files that contain hash values only (for -w)
- added option alias called --match-filter for option --wanted-list-filter
- added option alias called --expect for option --expect-hash
- improved --info for CRCs:
- added the polynomial representations: normal, reversed, and Koopman
- added the reciprocal polynomial for CRCs
- added binary and hex for each poly representation
- added polynomial representations and CRC parameters also for optimized CRC implementations
-
updates:
- improved documentation:
- added ISO-3309 notes on CRC-64
- added Wolfram's Hash function to the compatibility lists
- updated Jacksum's crc-catalogue by Greg Cook's catalogue of parametrised CRC algorithms
with CRC-8/HITAG, CRC-16/M17, and CRC-32/MEF. Also added CRC-64/JONES, and CRC-64/REDIS.
- updated bundled bouncycastle version to 1.71 (digests only), but baked out the regression that was
introduced by issue # 1036 in the Kangaroo class (the constructor parameter is now ignored completely
in bouncy castle :-/)
-
bug fixes:
- github issue #22: Statistics are all zero if --check-line has been set
- github issue #24: Regression: Jacksum 3.0.0 to 3.4.0 hangs while trying to read NTUSER.DAT on Microsoft Windows
if more than one algo has been selected
- correctness of check file shows "NaN %" in the statistics if there is no entry at all in the check file
- updated serialversionUID in the Parameters class, because members have changed in Jacksum 3.4.0
jacksum -h exit does not print the entire exit status section
- option --match-filter match,nomatch doesn't work like --match-filter all
- be not equal-tolerant for any BASE64* encoding
Jacksum 3.4.0, June 19, 2022
-
new features:
- features in this release are mostly around GitHub issue #10
- added option -w resp. --wanted-list to find files that match hashes in a precalculated list
- added option --wanted-list-charset and alias --charset-wanted-list to specify the charset for
the "wanted list"-file
- added option --wanted-list-filter in order to filter the output produced by -w,
allows both positive and negative matching
- documented operating modes to the help file
-
bug fixes:
- sm3 not returned by calling "jacksum -a all -l"
- if "--file-list " and "--format #FILENAME{path}" is set, a NPE is thrown if the parent of a file in the list is null
- false positives during -c: files are found as NEW more than once if the specified file references have different relative paths
to the same file
Jacksum 3.3.0, April 23, 2022
-
new features:
- added option --threads-hashing to control the number of threads if multiple
algorithms should run in parallel
- added option --threads-reading to control the number of threads if multiple
files should be read in parallel
- added option --path-relative-to-entry
(required for the integration at the Windows Explorer's SendTo-menu)
- added option --filesize to control whether the file size should be added or not
- added option --gnu-filename-escaping to tag the lines where file names have been escaped (default, linux, and bsd styles)
- parse escaped file names that have been tagged in default, linux and bsd verification files
- added format token #BINTAG to tag binary mode in verification files with a Linux style produced on Microsoft Windows
- added format token #ESCAPETAG to tag lines where the file name has been escaped using the GNU file name escaping feature
- added format tokens #ALGONAMES, #ALGONAMES{uppercase}, and #ALGONAMES{lowercase} to print algorithm names
separated by a comma if multiple algorithms have been selected
- added format tokens #HASHES, #HASHES{} to print hashes separated by comma if multiple algorithms have been selected
- added public API calls to allow requesting info from the build-in help
-
performance:
- the option --threads-reading is set to 1 by default to avoid performance degradation
for hashing files stored on non-SSD-media such as HDDs or CD-ROMs
- faster output of the build-in help by using memory buffering before printing
- improved initial values for HashMap constructors
-
bug fixes:
- fixed: if ")" is part of a file name (e.g. "file (1).txt", the regexp in the bsd, solaris-tagged,
solaris-untagged, and openssl compat files don't detect the filename
- fixed: if a path cannot be relativized by --path-relative-to it should not print
stacktrace, but simply return the non-relativized path (e.g. if both paths have a different roots
on Microsoft Windows).
- fixed: normalize paths if --path-relative-to is set to avoid false positives during verification
- fixed: option --path-relative-to is not taken into account if --compat has been set
- fixed: --header's invocation arg need to be quoted if arg starts with a # sign
- fixed: if Jacksum is being called by its API, the invocation args should be printed
from the actual parameter object values, and not from the CLI parameters
- fixed: wrong help section is printed out in case of user errors with --file-list-format
- fixed: slightly wrong error message if concurrent path options have been set
- fixed: algorithms with a numeric parameter (e.g. haval__) cannot be found
by the build-in help function if fully expessed (e.g. jacksum -h haval_256_5)
Jacksum 3.2.0, March 5, 2022
Jacksum 3.1.0, Nov 1, 2021
-
new features:
- allow Jacksum to read from all Windows files types on Microsoft Windows including
disks, partitions, RAM disks, the nul-device, and NTFS Alternate Data Streams (ADS) on both files and directories
- allow Jacksum to read from all file types on Unix-like operating systems including
block devices, character devices, named pipes (FIFOs), sockets, and doors (Solaris only)
- added option called --scan-ntfs-ads to let Jacksum scan for NTFS Alternate Data Streams (ADS)
during recursively directory traversal on Microsoft Windows
- added option called --scan-all-unix-file-types to let Jacksum scan for all Unix file types
- added option called --bom for adding a Byte-Order Mark (BOM) to the output if a charset has been specified where a BOM
is optional (charsets GB18030, UTF-8, UTF-16BE, UTF-16LE, UTF-32LE, and UTF-32BE)
- added option -q file: (GitHub issue #12)
- added z-base-32 encoding for hash value representation
-
minor improvements:
- improved check mode statistics: added number of improperly lines, and number of ignored lines
- improved the style of the short help to see everything even on terminals with 24-rows
- improved the manpage: added the hash function tools that are supported by BusyBox
-
minor bug fixes:
- fixed: don't follow symlinks to block devices, character devices, named pipes, sockets,
or doors if -f (regular files only) has been set.
- fixed: duplicate filenames in the checkfile leads to a misleading output,
the latest duplicate filename in a checkfile should win, and all previous duplicate filenames should be ignored
- fixed the manpage: PowerShell applet Get-FileHash has also RIPEMD160
Jacksum 3.0.1, Oct 4, 2021
-
added minor features
- added algorithm aliases crc32_jamcrc and crc-32_jamcrc for crc32_ubi
- added algo aliases sha512t224, sha512t256, skein256, skein512, and skein1024
- added compat aliases called linux-tagged and linux-untagged (for bsd and linux)
- added compat files called solaris-tagged and solaris-untagged
- added format aliases #ALGONAME{lowercase} and #ALGONAME{,lowercase}
-
improved build-in help
- 'jacksum -h parameters', 'jacksum -h options', and 'jacksum -h algorithms'
show the corresponding section entirely
- fixed:
jacksum -h examples shows only the first 3 example sections, it should show all example sections
- added info to the manpage about "cksum -a " which exists starting with the GNU Core Utilities 9.0
- added KeccakSum compatibility info to the help file
- fixed some typos in the help file
-
bugs fixed
- fixed: regression: files that have been specified by -o,-O and -u,-U are hashed, but they shouldn't
- fixed: if both errorFile and outputFile are set to the same file, their paths must be normalized before comparisons
- fixed: a NPE is thrown if a non-compatibility file is given by option -C
- fixed: the syntax version of the compatibility files should be checked before processing
- fixed: compat files bsd, linux, and openssl should use line separator \n on Microsoft Windows,
otherwise md5sum, sha1sum, etc. on GNU/Linux cannot read Jacksum's output
- fixed: typo in compat files linux and openssl which results in wrong stdin names
- fixed: Jacksum does not print 100% compatible output by using tagged compat files (bsd, and openssl)
- fixed: Jacksum does not parse 100% compatible output by using tagged compat files (bsd, and openssl)
- fixed: speed rank info is calculated wrongly (check with
jacksum -a all --list --info)
- fixed: format "#HASH{0,}" and -F "#CHECKSUM{i,}" don't work if the user
has selected one algorithm only
- fixed: crc32c can be used normal, but it is missing in the --list output
- fixed: remove the lab-remnant hex-camelcase from the code
- fixed: a potential mem leak in the Blake3 implementation
- fixed: don't print a warning about implicitly set format if we have set -C and we are in check mode
Jacksum 3.0.0, Sep 4, 2021
Command Line Interface
new features
- added an algorithm finder: if you know both the input and the output you can search for the
algorithm that can produce the output by brute force
(that can be useful for determining unknown CRC algorithm parameters)
- more than one directory can be specified on the command line for a
recursive tree traversal
- option -a enhancement: select algorithms by a search string or a bit width
- you can limit the depth of the recursion by specifying a depth
- added -L in order read files from a predefined list
- in addition to the "Rocksoft (tm) Model CRC Algorithm" schema,
the Generic CRC can be parameterized to include the (optional xor'ed)
length to the CRC in order to describe algorithms such as the POSIX
cksum or the FDDI CRC
- extended option -V in order to print out details of algorithms
(e.g. polynomial as a math expression for all CRCs)
- improved option -V to enable/disable errors as well
- each dash-option has got a dash-dash-option as well
- added the double dash-option in order to signify the end of command options
- added --info option to get info about the program, for the selected algorithms or
the compatibility file
- added options --charset-check-file, --charset-file-list, --charset-error-file,
--charset-output-file, --charset-stdout, and --charset-stderr in order to specify
the charset for various I/O objects
- Shortcut option -8 or --utf8 can be used to set UTF-8 character set for both stdout and stderr
bug fixes
- change requests sf# 1532748: read binary rather than text from standard input
and sf# 2842138: Incorrect output for data provided by stdin
Thanks to gsteele0000 and r_a_llo for the change requests
(unexpected suboptimal behavior was documented, though)
Jacksum 1.7.0, July 30, 2006
- added a customizable CRC algorithm, now you can calculate any CRC which
can be described by the Rocksoft Model CRC Algorithm (8 to 64 bit width),
see also sf# 1518023 Setting of an initial value for a CRC
- support for combinable checksums, see also sf# 1210489
(multiple hashes at the same time), thanks to synonymous2 for this feature request
- support for using all algorithms at once (-a all)
- two new algorithms are supported: crc32_bzip2, HAS-160
- support for Tiger Tree hashes (aka Merkle Hashes). Thanks to Carsten Krüger,
Germany for the feature request and pointers to some resources
- support for new encodings (bin, dec, oct)
- support for the combination of both options -c and -w,
Thanks to Dipl.-Inf. (FH) Ralf Kahrl, Germany for the implementation of this feature
- a small performance improvement for the whirlpool algorithms
- replaced the crc24 with a faster one by using the customizable CRC algorithm
(the old one had also a minor bug in the parameterless constructor)
- bug fixed: -V summary does not always return reasonable values
- bug fixed: update(byte[], int, int) fails if offset is > 0 (sf # 1525183)
This can cause problems if Jacksum is incorporated in different projects
- The bouncycastle and gnu classes have been moved to jonelo.jacksum.adapt so that
they won't clash with different downloaded versions of the classes. Actually this
is to avoid potential problems if a project uses both bouncycastle and Jacksum for example.
Thanks to Alberto Rodriguez, Spain for the feature request
- documentation updated (BeOS' data integrity programs, Tru64 and year of the invention for
many algorithms)
- tested with gij 4.0.2, JRE 1.3.1_18, 1.4.2_12, 5.0_07, 6.0-rc-b93
Jacksum 1.6.1, Nov 13, 2005
- regression bug fixed: -r does not work anymore on Linux/Unix
Thanks to Christoph R., Germany and niku.u for the bug reports (sf# 1354426)
- bug fixed: stdout and stderr overwrite each other when stdout and stderr are equal
- bug fixed: -c and -V summary give meaningless summary
- exit status depends on the result of -c now
Thanks to Martin Z., Germany for the feature request
- improved documentation ("exit status" and "see also" have been added)
Jacksum 1.6.0, Sep 3, 2005
- twelve new algorithms are supported: CRC-8, CRC-24, GOST R 34.11-94, SHA-0, SHA-224,
Tiger-128, Tiger-160, Tiger2, Whirlpool-0, Whirlpool-2, RIPEMD-256, RIPEMD-320
- change: "whirlpool" refers to Whirlpool-2 now, rather than to Whirlpool-1
- support for an alternate Adler 32 implementation
- improved option -c: Jacksum can check the integrity even if a file list has
not been created by Jacksum (or a file list without meta information)
Thanks to Sebastian J., Germany for this feature request
- new option -w for setting the working directory
- new algorithm-code called "none" for ignoring the real content of
the files for being able to check just against the filesize
- new algorithm-code called "read" for being able to read the file's content,
but without doing any calculation
- new option -E for an encoding of the checksum (hex, hexup, Base 16, Base 32,
Base 64 and BubbleBabble are supported)
- new option -g (group some bytes) for better readability of a hex checksum
- new option -G (group separator) for better readability of a hex checksum
- new option -o for redirecting the output to a file rather than the standard output,
in this case the file is also excluded from the calculation process
- new option -O for overwriting an existing file
- new option -I for ignoring lines when checking the integrity by -c
- new option -V for a verbose output (number of processed files and dirs, processed bytes,
number of read errors and elapsed time)
- improved option -e: works also for multiple files and directories
for being able to find duplicates
- improved option -e: when using -e, the option -x is not necessary anymore,
if the return value by default is hex anyway
- improved option -m: unnecessary defaults are not be written to the header anymore
- improved option -h: can show only fractions of the help file rather than
the complete help file
- improved option -t: #SEPARATOR and #QUOTE are also replaced
Thanks to Claudio C., Italy for the feature request
- improved option -F: #FILENAME{NAME} and #FILENAME{PATH} can be used
Thanks to Claudio C., Italy for the feature request
- bug fixed: if calling the getHexValue() method more than once, the hash based
algorithms return a different value; this can cause problems if Jacksum
is used in other projects, Thanks to Bob C. for the bug report
- bug fixed: problem on Unix/Linux while checking a file list if the filename's
last character is a colon (e. g. "Terminal 1:")
- improved documentation, added also collision files
- improved the public API (support a method to return byte[])
Thanks to Alex G., Germany for this feature request
- improved the public API for other projects (methods getAvailableAlgorithms(),
and equals() have been added)
- Added javadoc, Thanks to Corey Osman for this feature request
- refactored and code improvements
- tested with gij 3.2.2, Kaffe 1.1.4, JRE 1.3.1_16, 1.4.2_09, 5.0_04, 6.0-ea-b48
Jacksum 1.5.1, 2004-11-06
- regression bug fixed: when option -l is used, removed files will not be
printed out to the standard output anymore
Thanks to Sabrina Rolleman, Canada for the bugreport
- sourceforge feature request #1028824 has been implemented
(add homepage URI if -m is used)
Thanks to Lee A. Davis for the feature request
- improved documentation
Jacksum 1.5.0, 2004-08-08
- four new algorithms are supported: ed2k/eDonkey/eMule, CRC-64, ELF-32, FCS-16
Thanks to Henrique Malheiro, Portugal for the eDonkey reference implementation
- sourceforge bug #948070 has been fixed (-c won't work if -t has been set)
Thanks to Lee A. Davis for the bugreport
- bug fixed: Jacksum hangs if it reaches a fifo under Unix/Linux
- bug fixed: files which are used by another process can't be processed properly
- new option -d for ignoring symbolic links to directories under Unix/Linux to avoid
enless loops in particular cases
- improved option -q to support not only hex, but also text and decimal formats
- new option -F for being able to customize the output format
see also sourceforge feature request #968469 (show file length on MD5)
- new option -P to print out filenames with a customized separator
- lists created with -m are platform independent now, you can verify files against
a list on Linux/Unix if the list has been created on Windows for example
- new option -S to calculate just one fingerprint (summary)
Thanks to Berthold Kohlmann, Germany for this feature request
- sourceforege feature request #968491 has been implemented
(Handle pre 1.5 time formats with -c), thanks to Lee A. Davis for the request
- sourceforge feature request #968487 has been implemented (list dir argument as comment)
Thanks to Lee A. Davis for the feature request
- new option -A to specify alternate implementations of one of the following algorithms
crc32, md5, sha-1, sha-256, sha-384, sha-512
- added alias called FCS-32 for CRC-32
- added alias called SHA-160 for SHA-1
- Java version check also for IBM's Java VM
- tested successfully with JRE 1.5 beta3
Jacksum 1.4.0, 2004-02-01
- three new algorithms are supported: Tiger, Haval and
the MPEG spec of CRC-32
Thanks to Chris Ash, Southampton, UK for suggesting this feature based
on existing GPL code (VideoLan project)
- Haval can have both length (128, 160, 192, 224 or 256 bits)
and round parameters (3 to 5)
- algorithms sha-256, sha-384 and sha-512 are also supported with JRE 1.3 now
- new option -p for including path info on each line when recursively
file processing is requested, this makes it easier to sort or grep
ouput lines
Thanks to Douglas E. W. for both feature request and reference implementation
- new option -e for comparison against an expected checksum
Thanks to Daniel Ellermann, Germany for both feature request and
reference implementation
- new option -l to show a list of modified or deleted files, list can be used
to feed the zip command
- exits, if parameter -t does not contain supported characters
- version check introduced for better compatibility
- improved comments for sourcecode called Crc16.java
- documentation updated with Mac OS X information
- requires at least JRE 1.3.1, 1.4.2 is recommended
Jacksum 1.3.0, 2003-11-02
- eight new algorithms are supported: sha-256, sha-384 and sha-512
(requires Java 1.4.2 or later), xor8, sum8, sum16, sum24 and sum32
- option to check files against a given list (option -c)
Thanks to Leonardo A. Pires, Brazil for this feature request
Thanks a lot to Christian F., London, UK for his reference implementation
- option to create meta-information (option -m); while checking against
a list, you don't have to enter the original command line options again
- timestamps of files can be part of the output (option -t)
Thanks to Vishwanathan Narayanan, Florida, USA for this feature request
with the option -c you can check against both content and timestamps
- the output format of timestamps is highly configurable
- process a hex sequence quickly (option -q)
Thanks to Jack Memishian, USA for this feature request
- bug fixed: algorithm cksum hangs, if a file is greater than 2 GB
- bug fixed: processing special file system folders, like Windows'
"System Volume Information" throws to a NullPointerException
- stdout and stderr are separete streams now
- Jacksum is using the GNU crypto package 1.1
(http://www.gnu.org/software/gnu-crypto/)
- documentation updated
Jacksum 1.2.0, 2003-02-16
- four new algorithms from the GNU crypto project are supported:
MD4, RIPEMD-128, RIPEMD-160 and Whirlpool
(http://www.gnu.org/software/classpathx/crypto/)
- bug fixed: calling the getValue() method more than once for the Cksum
class returns a different value; this can cause problems if Jacksum
will be used in other projects.
Thanks to Cary Coulter for both, bug report and fix.
- bug fixed: CRC16 does not work like the standard CRC16
generator poly X^16 + X^15 + X^2 + 1.
Thanks to David Elfi, Argentina for both bug report and fix
- provided compatibility with free Kaffe Java VM
(Java version check only for Sun's Java VM)
- option -v to get the version of Jacksum
Jacksum 1.1.2, 2003-01-19
- bug fixed: input file will not be closed; this can cause
problems if Jacksum will be used in other projects.
Thanks to Bill Kelemen for both, bug report and fix.
- faster algorithm for output of checksums in hex format
- documentation updated (Solaris 9+ can have a md5 application)
Jacksum 1.1.1, 2002-11-07
- bug fixed: algorithm sysv returns invalid checksum if files are greater
than ~9 MB. Thanks to Sunny Liu, NYC for both bug report and fix.
Jacksum 1.1.0, 2002-09-08
- options for hexadecimal checksum output (lower- and uppercase)
Thanks to Peter Frey, Germany for this feature request
- filenames/directories will be sorted alphabetically
Jacksum 1.0.0, 2002-07-07
- initial public release
- requires at least JRE 1.3.0
- algorithms Adler32, BSD sum, POSIX cksum, CRC-16, CRC-32, MD2, MD5,
SHA1 and Unix System V sum are supported
- processing of subdirectories is supported
- a custom separator string can be defined