Saturday, October 17, 2026

Jacksum 4 is on the web!

I am pleased to announce that Jacksum 4 has been released! The current version is 4.0.2.

The step from 3.7 to 4 looks small, but it took three years, and it is bigger than the version number suggests. Jacksum 4 brings 97 new algorithms, new tools to judge the security of an algorithm, a much stricter verification mode, styles that match the native tools byte for byte, documentation in German, and a long list of fixes that make Jacksum more robust than ever. I call it the "trust, but verify" release ;-)

Here is an eagle view comparison chart with Jacksum 3.7.0:

Jacksum 3.7.0Jacksum 4.0.2
Algorithm support
Supported algorithms (including different lengths)489586
Default algorithmSHA3-256SHA3-256
Candidates from round 2 of the NIST SHA-3 competition 1noyes
Candidates from round 1 of the NIST SHA-3 competition 2noyes
Fugue 2.0, Romulus-H 3, belt-hash 4noyes
Verification
Strict check that also fails if files have been added or removednoyes
Ignoring stored hashes, file sizes, or timestamps during a checknoyes
Hash values compared case-insensitively by -c, -e, and -w 5noyes
Algorithm investigation (--info)
Security state "broken" incl. an explanationnoyes
Avalanche effectnoyes
Output and input
Output identical to md5, shasum, openssl dgst (3.x), and digest 6noyes
Style openssl111-dgst for the OpenSSL 1.1.1 namesnoyes
Hash data base (hdb) style, used by ClamAV's sigtoolnoyes
Styles full, without-hashes, without-sizes, without-timestamps, sizes-and-names, timestamps-and-namesnoyes
Timestamp formats in UTCnoyes
z-base-32 and BubbleBabble as input (-q, -k)noyes
Documentation
Help in German (-h de)noyes
Exact help search (--exact)noyes
Algorithm selection guide and use case cookbook (English and German)noyes
Library usage (API)
Query whether an algorithm is brokennoyes
Bundled Bouncy Castle relocated, no clash with your own Bouncy Castlenoyes
Requirements
Java required / recommended11+ / 17+21+ / 25+
LicenseGPLv3+GPLv3+

For the complete picture, including Jacksum 1.0.0 and 1.7.0 and a list of every supported algorithm, see the Feature Comparison Table in the wiki.

The highlights

97 new algorithms

Jacksum now supports 586 algorithms. With the candidates from rounds 1 and 2 of the NIST SHA-3 competition, Jacksum covers that competition much more completely. Fugue 2.0 is the tweak of Fugue that IBM published after the competition had ended. Romulus-H, belt-hash, and two new CRCs (crc64_nvme and crc32_go-koopman) complete the list.

Is my algorithm broken?

Jacksum can tell you now. The output of --info has a new section called "Security:" that says whether an algorithm is considered broken, and -V details also explains why:

$ jacksum -a sha1 --info -V details
  ...
  Security:
    broken:                               yes
      yes, 02/2017: the first identical-prefix collision was computed
      (SHAttered, 2^63.1), and in 01/2020 the first chosen-prefix
      collision followed ...

--info shows the avalanche effect of an algorithm as well, and programs that use Jacksum as a library can query the broken state through the API. If you are not sure which algorithm to pick, read the new Algorithm Selection Guide.

Better verification

--check-strict now also fails if files have been added to or removed from the directory, it prints the result in the summary, and the exit code follows it. With --ignore-hashes, --ignore-sizes, and --ignore-timestamps you decide which stored properties are checked. A file that cannot be read gets the new status ERROR instead of being reported as MISSING. And if a check file has been created with a different algorithm than the selected one, Jacksum names the cause rather than reporting every file as FAILED.

Better compatibility with other tools

The styles bsd, openssl-dgst, and solaris-digest-v now write the algorithm names that the native tools use, so their output is identical to md5, shasum --tag, sha256sum --tag, openssl dgst (OpenSSL 3.x and later), and digest -v on Solaris. If you need the OpenSSL 1.1.1 names (SHA256 instead of SHA2-256), use the new style openssl111-dgst. The new hdb style writes the hash data base format of ClamAV's sigtool.

More robust than ever

Jacksum 4 fixes a lot of bugs, in particular in the multi-threaded engine (out-of-memory errors, possible deadlocks, read errors that could go unnoticed), in the parser, in the encodings, and in a few algorithms. The releases 4.0.1 and 4.0.2 alone close more than 40 GitHub issues. Jacksum also no longer writes an HMAC key in plain text into the header of a check file. The bundled Bouncy Castle has been updated to 1.86.

Documentation in German

The help is available in German now (jacksum -h de), and so are the documents on GitHub. The new Use Cases cookbook (English and German) is organized by goal: "I want to solve this problem".

Please note before you upgrade

  • Jacksum 4 requires Java 21 or later. Java 25 is recommended.
  • An HMAC can no longer be calculated with the algorithms of the ascon family, because there is no standard-compliant HMAC for sponge-based hash functions.
  • Some algorithms return different values now, because the old values were wrong: prng, fletcher16 (input larger than 64 KiB), sum64 (very large input), and truncated HMACs whose length is not a multiple of 8 bits.
  • The style openssl-dgst uses the OpenSSL 3.x names now. Use openssl111-dgst for the old behavior.
  • For API users: the bundled Bouncy Castle has moved from org.bouncycastle to net.jacksum.zzadopt.org.bouncycastle, and the adopted GNU Crypto classes have moved to net.jacksum.zzadopt.org.gnu.crypto.

Have fun with Jacksum 4, and let me know what you think!

Footnotes:
  1. BlueMidnightWish-[224,256,384,512], CubeHash-[224,256,384,512], Hamsi-[224,256,384,512], Shabal-[192,224,256,384,512], and SIMD-[224,256,384,512] ↩

  2. MD6 (md6-8 to md6-512 in steps of 8) and Edon-R-[224,256,384,512] ↩

  3. Romulus-H is one of the finalists of the NIST Lightweight Cryptography competition ↩

  4. belt-hash is the hash function of the Belarusian national standard STB 34.101.31 ↩

  5. unless the encoding has a case-sensitive alphabet, such as Base64 or Z85 ↩

  6. the styles bsd, openssl-dgst, and solaris-digest-v ↩

No comments:

Post a Comment