Release Notes

(English only)

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 <format> if both "-F <format>" and "-q file:<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 <algos> [--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:
    - ascon-hash, ascon-hasha, ascon-xof, and ascon-xofa
    - esch256, and esch384
    - photon-beetle
    - xoodyak - with a contribution fix by jonelo (https://github.com/bcgit/bc-java/pull/1362)
  - 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 <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 <threads> to control the number of threads if multiple
      algorithms should run in parallel
    - added option --threads-reading <threads> to control the number of threads if multiple
      files should be read in parallel
    - added option --path-relative-to-entry <integer>
      (required for the integration at the Windows Explorer's SendTo-menu)
    - added option --filesize <boolean> to control whether the file size should be added or not
    - added option --gnu-filename-escaping <boolean> 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{<encoding>} 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_<width>_<rounds>) 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


- new features

    - the default parser takes option -s into account (GitHub issue #9)
    - added option --header
    - added --path-relative-to to print paths relative to another path
      (required for the File Browser Integration on Windows)
    - added --path-absolute to print absolute paths
    - added --no-path to omit the path
    - added encodings base64-nopadding, and base64url-nopadding

- performance improvements

    - since Java 9+ supports a fast CRC32c, it became the primary implementation for crc32c
    - improved initial values for HashMap constructors

- minor improvements (comfort)

    - added aliases rg32, rg-32, and rg64, rg-64 for radiogatun (GitHub issue #14)
    - added alias called --style for the option --compat
    - added alias --absolute for --path-absolute
    - added alias --relative-to for --path-relative-to
    - improved error handling for the algorithm parameter
    - reformatted help

- bug fixes

    - fixed: on Linux during integrity checking, don't replace the back slash file separator for filenames,
      because on Linux it is allowed to have backslashes in filenames (GitHub issue #17)
    - fixed: wrong hashSize in GNU-Crypto's whirlpool 0-arguments constructor
      (and all whirlpool derived implementations) (GitHub issue #19)
    - fixed: -F "#HASH{<algo>}" and -F "#HASH{<algo>,<encoding>}" does not work if just only one algorithm
      has been selected
    - fixed: typo in manpage (bitwidth for RIPEMD 320)


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:<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{<i>,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 <algo>" 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,<encoding>}" and  -F "#CHECKSUM{i,<encoding>}" 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


- Algorithms

  new algorithms
    - 408 new algorithms (including different sizes) have been added
    - SHA-3 winner of the NIS SHA-3 competition (FIPS 202)
      * SHA3-224, SHA3-256, SHA3-384, SHA3-512 provided by the OpenJDK 9+ resp.
        by bouncycastle (bc) as an alternative implementation or if Java < 9 is being used
      * SHAKE128, SHAKE256 (provided by bc)
    - completion of the SHA-2 family definitions (FIS 180-4):
      * SHA-512/224, SHA-512/256 provided by the OpenJDK 9+ resp.
          by bc as an alternative implementation or if Java < 9 is being used
    - national standards
      * Kupyna256, Kupyna384, Kupyna512 (Ukraine standard)
      * LSH (Korean Standard): LSH-256-224, LSH-256-256, LSH-512-224, LSH-512-256, and
        LSH-512-384, LSH-512-512
      * SM3 (Chinese standard, provided by bc)
      * Streebog-256, Streebog-512 (Russian standard GOST R 34.11-2012, provided by bc)
    - other modern cryptographic hash functions
      * BLAKE3 (announced in 2020)
      * BLAKE2s, BLAKE2b (both with support for arbitrary output)
      * KangarooTwelve (K12) and MarsupilamiFourteen (M14)
      * RadioGatun[32], Radiogatun[64] (provided by Project PNRT SAPHIR)
    - all SHA-3 finalists (round 3) of the NIST SHA-3 competition
      * BLAKE-224, BLAKE-256, BLAKE-384, BLAKE-512 (provided by Project PNRT SAPHIR)
      * Groestl-224, Groestl-256, Groestl-384, Groestl-512 (provided by Project PNRT SAPHIR)
      * JH (224, 256, 384 and 512 bits) (provided by Project PNRT SAPHIR)   
      * Keccak (224, 256, 384 and 512 bits) (provided by bc)
      * Skein256, Skein512, Skein1024 (provided by bc) with support for arbitrary output
    - three algorithms from round 2 of the NIST SHA-3 competition
      * ECHO-[224,256,348,512]
      * Fugue-[224,256,348,512]
      * Luffa-[224,256,348,512]
    - proposals from the NIST crypto workshops before the SHA-3 competition
      * FORK-256, DHA-256, VSH-1024
    - legacy algorithm support
      * PANAMA (provided by Project PNRT SAPHIR)
      * MDC2 (the U.S. Patent 4,908,861 expired on August 28, 2007)
        Thanks to Stefan Palme, Germany for the MDC2 implementation from his
        HBCI4Java project (LGPL)
      * GOST also with init parameters as suggested by the Crypto-Pro company
      * FNV-0, FNV-1 and FNV-1a
        (for each algorithm: 32, 64, 128, 256, 512 and 1024 bits) (provided by jonelo)
      * Minix' crc and Minix' cksum, and sum before Minix 3.2.1 (provided by jonelo)
      * Plan 9' sum (FDDI CRC) (provided by jonelo)
      * PHP's crc32 (provided by jonelo)
      * CRC32c (iSCSI) (provided by jonelo)
      * Bob Jenkins' One-at-a-Time hash (joaat32, provided by jonelo)
      * Fletcher-16 (provided by jonelo)
      * sum40, sum48, sum56 (provided by jonelo)
      * CRC64 (ECMA 182) (provided by jonelo)
      * CRC64 (.xz and prog lang GO, const ECMA) (provided by jonelo)
      * CRC64 (prog lang GO, const ISO) (provided by jonelo)
      * XXH32 (provided by Apache Commons Codec 1.15)

   bug fixes
     - change request sf# 1693872: Decrease the memory requirement of the
       TigerTree class, Thanks to Oleg Dyakun for the feature request
     - bug fixed: a checksum can be returned in a negative format if the
       customizable CRC has a width of 64 bit


- Performance

  new features   
    - added multi processor/multi core support for parallel hashing of many files
    - added multi processor/multi core support for parallel hashing of many algorithms
      Thanks to Federico Tello Gentile, Argentina for both the feature request
      and the implementation

  bug fixes
    - change request: for the CrcGeneric update method: moved an if-condition outside the loop
    - change request: inline the update method for the loops
      Thanks to Federico Tello Gentile, Argentina for the feature request
    - MD2 from the JRE is used by default if available, pure Java implementation of MD2
      on demand (-A), thanks to Federico Tello Gentile, Argentina for the feature request


- Data integrity verification

  new features 
    - added option --compat in order to parse data that has been produced by 3rd party apps
    - added compatibility files/parsers for BSD-, FCIV-, Linux-, SFV-, and OpenSSL files
    - possibility to create own compatibility files
    - added option --charset-check-file in order to specify the charset for the check file
    - added BOM awareness for check files
    - can detect not only OK, FAILED, and MISSING files, but also NEW files
    - added option --check-line in order to check just one line
    - added option --check-strict in order to exit nonzero if one or more input line is invalid
    - added option --list-filter to show ok, failed, missing, and/or new files


- Formats and Encodings

  new features
    - added new Encodings: base32_nopad, base32hex, base32hex_nopad, base64url 
    - unixtime can be selected for the timestamp format
    - Option -q bin in order to support binary input (zeros and ones),
      comma and space delimited values are supported
    - Option -q txtf in order to support UTF-8 formatted text including
      interpretation of escape sequences (\n, \r, \t, \", \', \\ and \xHH)
    - the alias called #DIGEST has been added to the format options
    - the alias called #LENGTH has been added to the format options
    - added #CHECKSUM{i,e} to the format options in order to specify
      a particular encoding for the CHECKSUM{i}
    - added #SEQUENCE to the format options
    - added #SEQUENCE{e} to the format options in order to specify
      a particular encoding for the SEQUENCE
    - Option -q hex also supports comma and space delimited values
    - Option -q dec also supports space delimited values
    - Option -t iso8601 in order to produce ISO 8601 compatible timestamps

   bug fixes
    - bug fixed: padding for base32 is not appended when it should (see RFC 4648)
      Thanks to Dr. Richard B. Kreckel, Germany for both the bug report
      (it has been fixed by replacing the existing class)


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)


- Documentation

  new features and improvements
    - updated availability of checksum/hash tools/algorithms on
      BeOS, FreeBSD, HP-UX, GNU/Linux, Mac OS X, Solaris, and Windows
    - added availability of checksum/hash tools/algorithms on
      7z, Angstrom, DragonFly BSD, CentOS, FreeDOS, GNU/Hurd, gpg, IBM AIX,
      Java, Kali Linux, LibreSSL, macOS, Minix, MS-DOS, NetBSD, NexStep,
      PHP, Plan 9, Python, and OpenSSL (phew, that were a lot of VMs and tests ;-)
    - added more examples for learning Jacksum
    - redesigned the help page
   
  bug fixes
    - bug fixed: "-h license" does not print anything
    - bug fixed: -h prints help sections for both uppercase and lowercase option,
      but should only print the expected help section


- Internal/API

  new features and improvements
    - feature request sf# 1602248: support for NIO byte buffers,
      Thanks to Moritz Ringler, Germany for the feature request
    - the code structure has been significantly redesigned and refactored
      in order to restore the maintainability of Jacksum for new requirements

  replacements
    - replaced the existing Base64 implementation (public domain) with the one
      from the Java Standard SE 8+ API
    - replaced the existing Base32 implementation (public domain) with the Base32
      implemenation from www.dnsjava.org (2-clause BSD license)


- Compatibility changes

  changes
    - requires a JRE/JDK that is compatible with Java 11 or later, OpenJDK 11+ is recommended
    - released under the terms of the GNU GPLv3 or later
    - the default algorithm is now SHA3-256 and not SHA-1 anymore 
    - by default, data is read from standard input in binary mode
    - by default, recursively operation is active for folders, by default depth is unlimited
    - if -r is specified explicitly, also a depth has to be specified
    - redirection to a file by -u, -U, -o, and -O uses UTF-8 rather than the default
      shell character set in order to support Unicode characters for filenames/folders
      Thanks to Rajmund, UK for the feature request and code suggestion
    - option -l enables the list view in general, for filtering verification results use --list-filter
    - option "-t default" defaults to a format that also includes the milliseconds
   
  deletions
    - options -m, -p, -S, -w have been removed
    - the Jacksum class in the default package has been removed
    - Java version check has been removed
    - German translation for option -h has been removed (at least for now)   


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