libxcrypt NEWS -- history of user-visible changes.

Please send bug reports, questions and suggestions to
<https://github.com/besser82/libxcrypt/issues>.

Version 4.4.28
* Add glibc-on-or1k (OpenRISC 1000) entry to libcrypt.minver.
  This was added in GNU libc 2.35.

Version 4.4.27
* Limit the maximum amount of rbytes to 64 bytes (512 bits) for
  yescrypt, gost-yescrypt, and scrypt.  Also reflect this limit
  in the documentation (issue #145).

Version 4.4.26
* Fix compilation on systems with GCC >= 10, that do not support
  declarations with __attribute__((symver)).

Version 4.4.25
* Add support for Python 3.11 in the configure script.
* Stricter checking of invalid salt characters (issue #135).
  Hashed passphrases are always entirely printable ASCII, and do
  not contain any whitespace or the characters ':', ';', '*', '!',
  or '\'.  (These characters are used as delimiters and special
  markers in the passwd(5) and shadow(5) files.)

Version 4.4.24
* Add hash group for Debian in lib/hashes.conf.
  Debian has switched to use the yescrypt hashing algorithm as
  the default for new user passwords, so we should add a group
  for this distribution.
* Overhaul the badsalt test.
  Test patterns are now mostly generated rather than manually coded
  into a big table.  Not reading past the end of the “setting” part
  of the string is tested more thoroughly (this would have caught the
  sunmd5 $$ bug if it had been available at the time).
  Test logs are tidier.
* Add ‘test-programs’ utility target to Makefile.
  It is sometimes useful to compile all the test programs but not run
  them.  Add a Makefile target that does this.
* Fix incorrect bcrypt-related ifdeffage in test/badsalt.c.
  The four variants of bcrypt are independently configurable, but the
  badsalt tests for them were all being toggled by INCLUDE_bcrypt,
  which is only the macro for the $2b$ variant.
* Fix bigcrypt-related test cases in test/badsalt.c.
  The test spec was only correct when both or neither of bigcrypt and
  descrypt were enabled.
* Detect ASan in configure and disable incompatible tests.
  ASan’s “interceptors” for crypt and crypt_r have a semantic conflict
  with libxcrypt, requiring a few tests to be disabled for builds with
  -fsanitize-address.  See commentary in test/crypt-badargs.c for an
  explanation of the conflict, and the commentary in
  build-aux/m4/zw_detect_asan.m4 for why a configure test is required.
* Fix several issues found by Covscan in the testsuite.  These include:
  - CWE-170: String not null terminated (STRING_NULL)
  - CWE-188: Reliance on integer endianness (INCOMPATIBLE_CAST)
  - CWE-190: Unintentional integer overflow (OVERFLOW_BEFORE_WIDEN)
  - CWE-569: Wrong sizeof argument (SIZEOF_MISMATCH)
  - CWE-573: Missing varargs init or cleanup (VARARGS)
  - CWE-687: Argument cannot be negative (NEGATIVE_RETURNS)

Version 4.4.23
* Fix output calculation for gensalt_yescrypt_rn().
* Fix -Werror=conversion in lib/crypt-des-obsolete.c,
  test/des-obsolete.c, and test/des-obsolete_r.c.

Version 4.4.22
* The crypt_checksalt() function has been fixed to correctly return
  with 'CRYPT_SALT_INVALID', in case the setting, that is passed
  to be checked, represents an empty passphrase or an uncomputed
  setting for descrypt without any salt characters.

Version 4.4.21
* The crypt_checksalt() function will now return the value
  'CRYPT_SALT_METHOD_LEGACY' in case the setting, that is passed
  to be checked, uses a hashing method, which is considered to be
  too weak for use with new passphrases.

Version 4.4.20
* Fix build when the CFLAGS variable, that is passed into the
  configure script, has a leading whitespace character in it
  (issue #123).

Version 4.4.19
* Improve fallback implementation of explicit_bzero.
* Add glibc-on-CSKY, ARC, and RISCV-32 entries to libcrypt.minver.
  These were added in GNU libc 2.29, 2.32, and 2.33 respectively
  (issue #122).
* Do not build xcrypt.h if we’re not going to install it.
* Do not apply --enable-obsolete-api-enosys mode to fcrypt.
* Compilation fix for NetBSD.  NetBSD’s <unistd.h> declares encrypt
  and setkey to return int, contrary to POSIX (which says they return
  void).  Rename those declarations out of the way with macros.
* Compilation fixes for building with GCC 11.
  Basically fixes for explicit type-casting.
* Force update of existing symlinks during installation (issue #120).

Version 4.4.18
* Fix compilation errors on (Free)BSD (issue #110).
* Fix conversion error in lib/alg-gost3411-core.c, which is seen by
  some sensitive compilers.
* Convert build scripts to Perl.
  The minimum version of Perl required is 5.14.

Version 4.4.17
* Fix compilation error in 'alignas (type)' with older versions
  of glibc and/or gcc (issue #107).
* Salt string compatibility with generic implementations (issue #105).
  All other existing implementations of the md5crypt, sha256crypt,
  and sha512crypt hashing methods allow any ASCII character to be
  present in the salt string.
  We changed our implementation of these hash methods to be compliant
  with the general behaviour, except for the colon ':' character,
  which serves a special purpose in the Unix shadow file, and the
  newline '\n' character, since all parameters of the user data must
  be on the same line within the Unix shadow file.
* Fix for GCC 10.2 on s390x.

Version 4.4.16
* Add support for the e2k architecture.

Version 4.4.15
* The compatibility symbols crypt_gensalt_r, xcrypt, xcrypt_r,
  xcrypt_gensalt, and xcrypt_gensalt_r are deprecated further.
  (These are alternative names for crypt_gensalt_rn, crypt, crypt_r,
  crypt_gensalt, and crypt_gensalt_rn, respectively; there is no
  difference in behavior.)

  In an --enable-xcrypt-compat-files configuration, newly compiled
  programs can still use functions with these names if they include
  xcrypt.h, but a program that attempts to use one of these functions
  *without* including xcrypt.h will fail to link.  In particular, this
  means AC_CHECK_FUNCS([xcrypt]) will not detect xcrypt, because the
  test program generated by AC_CHECK_FUNCS does not include xcrypt.h.

  In a --disable-xcrypt-compat-files --enable-obsolete-api
  configuration, xcrypt.h is not installed and newly compiled programs
  cannot use functions with these names, but existing binaries that
  expect to find these symbols in a shared libcrypt.so.1 will still
  work.

  In a --disable-obsolete-api configuration, these symbols are not
  defined at all; moreover, --disable-obsolete-api now implies
  --disable-xcrypt-compat-files (which means xcrypt.h isn't installed).

Version 4.4.14
* Renamed bootstrap script: 'bootstrap' -> 'autogen.sh'.
  If building from a Git checkout instead of a tarball release,
  use './autogen.sh' to create the configure script.

Version 4.4.13
* libxcrypt now builds (including working tests) on Mac OSX.
* Speed up ka-sunmd5 by skipping most of the test phrases.
  ka-sunmd5 is slower than the entire rest of the testsuite put
  together, because the sunmd5 hash is Just That Slow and we have to do
  extra tests for it to ensure bug-compatibility.  No easy optimizations
  are possible and the difficult optimizations are not worth the
  engineering effort for this obsolete hash.  Instead, skip most of the
  test phrases.  See comments in test/ka-table-gen.py!h_sunmd5 for
  further explanation.

Version 4.4.12
* Another fix for GCC v10.x, which occurs on s390 architectures only.

Version 4.4.11
* Fixes for GCC v10.x (issue #95).
* Change how the known-answer tests are parallelized.

Version 4.4.10
* Fix ordering of hash methods in crypt-hashes.h when generated
  using gawk < 4.1.0.

Version 4.4.9
* Fix false positive finding from CovScan.

Version 4.4.8
* Add binary compatibility for GNU/Hurd and GNU/kFreeBSD.

Version 4.4.7
* LICENSING: Add missing files and update license information.
* Fix -Wformat in test/crypt-kat.c.

Version 4.4.6
* Make unalignment test really unaligned.

Version 4.4.5
* Fix alignment problem for GOST 34.11 (Streebog) in gost-yestcrypt.
  Some architectures in some circumstances do not allow unaligned
  memory access (such as ARM, MIPS, SPARC) triggering SIGBUS. This
  patch very crudely fixes this issue.
  Being unfixed this would trigger SIGBUS when password buffer is
  unaligned. Crash and fix are tested on UltraSparc T5 on GCC Compile
  farm.

Version 4.4.4
* The crypt_* functions will now all fail and set errno to ERANGE if
  their 'phrase' argument is longer than CRYPT_MAX_PASSPHRASE_SIZE
  characters (this is currently 512).  Formerly, longer passphrases
  would either be silently accepted, silently truncated, or the
  library would crash, depending on the hashing method.
* The NT hashing method no longer truncates passphrases at 128
  characters; Windows does not do this.  (The Windows login dialog
  _limits_ interactively entered passphrases to 127 characters.
  Passphrases set via the low-level API can be longer.)

Version 4.4.3
* Fix the value of SUNMD5_MAX_ROUNDS.
* Add generated C++-guards to <xcrypt.h>.
* Add --enable-obsolete-api-enosys configure option.
  If enabled, this option replaces the obsolete APIs (fcrypt,
  encrypt{,_r}, and setkey{,_r}) with stubs that set errno to
  ENOSYS and return without performing any real operations.
  This allows one to disable DEScrypt support while preserving
  POSIX compliance.
  For security reasons, the encrypt{,r} functions will also
  overwrite their data-block argument with random bits.
  The fcrypt function will always produce a failure token
  (*0 or *1), unless the library was also configured with
  --disable-failure-tokens, in which case it will always
  return NULL.

Version 4.4.2
* Add test-alg-yescrypt for improved coverage.
* Add x32 specific inline asm.

Version 4.4.1
* Change the output of the gensalt function for the NT hashing method
  ($3$) to output just its prefix ($3$) instead of a fake salt.
  The output buffer for the returned string must be at least 4 bytes
  long.
* Decrase the minimum required amount of random bytes for the NT
  hashing method to 1 byte, which is actually not used.
* The default linker flags now generate binaries with full read-only
  relocations (including full read-only re-mapping of the GOT), if
  supported by the linker and the system's native binary format.

Version 4.4.0
* Implement the crypt_preferred_method function.
  This function can be used as a convenience function to get the prefix
  of the preferred hash method.

Version 4.3.4
* --enable-hashes now supports 'fedora' as a group of hashing methods.
* Add aliases for xcrypt{,_r} and xcrypt_gensalt{,_r}.
  They were added for code compatibility with libxcrypt v3.1.1
  and earlier.
* Install the <xcrypt.h> header file, declaring the previously named
  aliases, and a symlink from libxcrypt.so to libcrypt.so, if a shared
  library is build.  For static libraries a corresponding symlink for
  the archive file will be installed.
  The installation of the compatibility files can be disabled by
  passing the '--disable-xcrypt-compat-files' flag to the configure
  script.
* Replace the prototype for the crypt_gensalt_r function with a
  declaration through a macro, so new compiled applications link
  against the identical crypt_gensalt_rn function directly.

Version 4.3.3
* Add an alias for crypt_gensalt_r.
  The function was available in older versions (v3.1.1 and earlier)
  of libxcrypt.  It has the same semantics and the same prototype as
  the crypt_gensalt_rn function.

Version 4.3.2
* Fix the gensalt function for the NT hashing method ($3$) to
  properly terminate its output string.  The output buffer for the
  returned string must be at least 30 bytes long.
* Remove the gensalt function for the bcrypt x variant ($2x$).
  This prefix was never intended for use when hashing new passphrases.
  The only use case originally intended was to manually edit '$2a$' to
  '$2x$' in passphrase hashes to knowingly take the risk yet enable
  users to continue to log in when upgrading systems with buggy bcrypt
  implementations to fixed versions.

Version 4.3.1
* Reduce the number of methods that can be the default for new hashes.
  We don’t want to accidentally encourage use of gost-yescrypt,
  scrypt, or the bug-compatibility bcrypt variants by people who do
  not have a specific need for them.
* sha256crypt ($5$) is not considered to be strong anymore.  Thus
  it was dropped from the STRONG and DEFAULT sets.
* The four variants of bcrypt ($2b$, $2a$, $2y$, $2x$) are now
  independently selectable at configure time.  The $2x$ variant has
  been dropped from the STRONG set, because it has a severe bug
  causing it to be easy to find collisions for some passwords.  The
  $2x$ and $2y$ variants have been dropped from the FreeBSD, NetBSD,
  OpenBSD, and Solaris compatibility sets, because those operating
  systems never supported those variants.

Version 4.3.0
* Implement the gost-yescrypt ($gy$) hashing algorithm.
* Remove all of the nonnull annotations, which are a questionable
  optimization that have caused problems in the past and may cause
  future problems on some systems.
* Rename all hash methods to match naming in John the Ripper.
* Make the configure switches --enable-obsolete-api and
  --enable-hashes process their arguments case-insensitively; for
  instance, "--enable-hashes=OpenBSD" and "--enable-hashes=openbsd"
  are now understood as synonymous.
* Fix gensalt for bigcrypt if descrypt hash method is not selected
  at compile time.
* Fix the bigcrypt hash method to reject too short settings and/or
  descrypt hashes with a truncated phrase.  Hashes with a setting
  shorter than 13 characters and phrases shorter than 8 characters
  are valid bigcrypt hashes, although they are identical with the
  output generated by descrypt under the same conditions.
  This only applies when the descrypt hash method is not selected
  at compile time.
* Implement crypt_checksalt, which can be used by portable users of
  libxcrypt to check whether the desired hash method is supported.
* Make a default prefix available whenever at least one strong hash
  is enabled.
* Fix the definition of 'CRYPT_GENSALT_IMPLEMENTS_DEFAULT_PREFIX'
  to reflect whether the default prefix is available or not.

Version 4.2.3
* Add bootstrap script.  If building from a Git checkout instead of a
  tarball release, use './bootstrap' to create the configure script.
* Use sha512 implementation from Colin Percival.  Thus we now have a
  sha512 implementation under the BSD license.
* Use md5 implementation from Alexander Peslyak.  Thus we now have a
  md5 implementation in the public domain.
* 'make dist' now generates bzip2 and xz compressed tarballs along
  with the default gzip compressed tarball.
* The group 'altlinux' has been renamed to 'alt' in --enable-hashes,
  as the ALTLINUX distribution has been rebranded to ALT some time ago.
* New tagged versions are automatically submitted for Coverity Scan:
  https://scan.coverity.com/projects/besser82-libxcrypt

Version 4.2.2
* Convert existing manpages to BSD mdoc format.

Version 4.2.1
* Fix tests for yescrypt and scrypt, when failure-tokens have been
  disabled.

Version 4.2.0
* Implement yescrypt ($y$) and scrypt ($7$) hashing algorithms.
* For scrypt the implemented gensalt function ensures every new hash
  is computed using at least 32 MiBytes of RAM.
* yescrypt is the new default method used for new hashes.
* --enable-hashes now supports additional groups of hashing methods:
  'altlinux', 'owl', and 'suse', which select the methods historically
  supported on those operating systems.
* Added 'XCRYPT_VERSION_*' macros.

Version 4.1.2
* Add optional 'check-valgrind' target to the Makefile.
* Replace crypt-sha{256,512}.c with an implementation in the Public
  Domain.
* Add alias man-pages for other crypt functions.
* Add configure option --disable-failure-tokens, which causes crypt
  and crypt_r to return NULL on failure, as crypt_rn and crypt_ra do,
  instead of a special "failure token".  Using this option improves
  compatibility with programs written on the assumption that, like
  most C library functions, crypt and crypt_r will return NULL on
  failure; but it breaks compatibility with programs that assume these
  functions never return NULL.  We're not sure which type of program
  is more common.  Please let us know if you encounter either.
* Improved handling of out-of-range cost parameters in gensalt.
  The behavior is now:
  - for hashes with a fixed cost parameter (DES/trad, DES/big, NTHASH,
    MD5/bsd), crypt_gensalt only accepts 0 as the rounds argument.
  - for hashes with a linear cost parameter (DES/bsdi, MD5/sun, SHA1,
    SHA256, SHA512), crypt_gensalt accepts 0 or any value in the range
    [1, ULONG_MAX] and clips it to the actual valid range for the hash
    function, if necessary.  In the case of DES/bsdi, even numbers
    become odd, as well.
  - for hashes with an exponential cost parameter (bcrypt),
    crypt_gensalt only accepts 0 or a value in the actual valid range.
  - the documented valid range for SHA1 is now [4, 4294967295] instead
    of [1, 4294967295].
  - all of this is tested.

Version 4.1.1
* --enable-hashes now supports additional groups of hashing methods:
  'freebsd', 'netbsd', 'openbsd', 'osx', and 'solaris', which select
  the hashes historically supported on those operating systems.
* Predictable behavior when arguments to crypt() are NULL or invalid
  (issue #15).
* Hash formats $5, $6, and $md5 once again allow an explicit rounds
  parameter specifying the default number of rounds (issue #16).
* The library no longer uses swapcontext(), for ease of debugging and
  better compatibility with hardening mechanisms like Intel CET
  (issue #18).
* Can now be built with versions of GNU ld older than 2.26.2.
* crypt_gensalt_ra no longer leaks memory on failure.

Version 4.1.0
* Fix spelling of SUSE.
* Lower the minimum required automake version to 1.14.
* Fix build with USE_SWAPCONTEXT turned off.
* Extend --enable-weak-hashes configure option to accept optional
  "glibc" parameter.  When specified, it enables only those of
  weak hashes that are supported by historic versions of the
  GNU libc.
* Fix the leak of obtained random bytes.
* Check expected output strings for deterministic methods.
* Fix memory leak in crypt_sha1crypt_rn.
* Fix read of random bytes out of bounds in gensalt_sha1crypt_rn.
* Make it possible to disable individual hashes at configure time.
  The default is --enable-hashes=all.  --enable-hashes=strong is the
  equivalent of the old --disable-weak-hashes.  You could even do
  --enable-hashes=bcrypt,des to get a binary-compatible libcrypt.so.1
  that still supports almost nothing other than bcrypt.
* Make salt validation pickier.
* Replace crypt-sunmd5.c with BSD-licensed cleanroom reimplementation.
* Make crypt_gensalt for $sha1 deterministic.
* Fix incorrect output-size computation in crypt_sha1crypt_rn.
* Add docs for SHA1, MD5/Sun, NTHASH.
* Introduce CRYPT_GENSALT_IMPLEMENTS_* feature test macros.
* Install libcrypt.pc symlink along with libxcrypt.pc.
* Extend --enable-obsolete-api configure option.
  Make vendor specific parts of compatibility ABI that are enabled by
  --enable-obsolete-api option configurable.
  This allows vendors to enable only those parts of compatibility ABI
  that are relevant to them.
* Extend overall test coverage.

Version 4.0.1
* Fixes for GCC v8.x
* Add symbol version for riscv64
* Fixed an uninitialized value in test-crypt-badsalt

Version 4.0.0
* Full binary backward compatibility with glibc libcrypt; all programs
  compiled with glibc libcrypt, including vendor-patched versions that
  include the Openwall extensions, should work with this libcrypt
  (however, programs compiled against this libcrypt will NOT work with
  glibc libcrypt).
* struct crypt_data is now only 32kB (from 128kB), and divided into a
  public-API section and a properly opaque internal section.
* New feature: supplying a null pointer as the "prefix" argument to
  any of the crypt_gencrypt functions will cause it to select the best
  available hash function (in this release, bcrypt in mode 'a').
  CAUTION: it must be a null pointer, not an empty string.  If you
  supply an empty string, that selects DES, which is the *worst*
  available hash function.
* New feature: supplying a null pointer as the "rbytes" argument to
  any of the crypt_gencrypt functions will cause it to acquire random
  bytes from the operating system.
* The legacy functions bigcrypt, fcrypt, encrypt, encrypt_r,
  setkey, and setkey_r are no longer available for use by new programs.
  All of these (except fcrypt, which was just another name for crypt)
  force the use of DES, which is no longer safe for any application.
* New configure option --disable-obsolete-api removes the above
  functions from the library.  Since this breaks compatibility with
  glibc's libcrypt, when this option is used the shared library will
  be libcrypt.so.2 instead of libcrypt.so.1, and all of the
  compatibility symbol versions for the crypt* functions will be
  omitted.  This option is the default on all operating systems where
  there is no GNU C Library to be compatible with.
* New configure option --disable-weak-hashes removes all support for
  DES and MD5 hashes from the library.  This option implies
  --disable-obsolete-api, and will prevent DES and MD5 password hashes
  from being *verified* -- accounts with such hashes are effectively
  locked.  It is intended for use in high-security new installations.
* Sensitive intermediate data is now thoroughly scrubbed from the
  stack and CPU registers before the crypt functions return to their
  callers.
* UFC-crypt has been replaced with FreeSec; this enables the reduction in
  size of crypt_data, and adds full support for BSD extended DES hashes.
* Extensive code cleanup and portability work.  The static library
  should now be buildable with any C99 compiler, although some
  features may not be available (notably acquiring random bytes from
  the operating system and scrubbing the stack).  The shared library
  does still require some GNU extensions for symbol versioning.
* The configure options --enable-Wno-cast-align and --enable-bootstrap
  are no longer necessary and have been removed.
* If building from a Git checkout instead of a tarball release, use
  'autoreconf -i' to create the configure script; autogen.sh has been
  removed.
* More thoroughly tested.

Version 3.1.1
* Add '--enable-Wno-cast-align' to silence 'cast increases required alignment'
* Whitespace clean-up

Version 3.1.0
* Update upstream-contact
* Add './configure --enable-bootstrap' to skip some tests on initial build
* Add bootstrap-script for Autotools
* Add LICENSE for bcrypt
* Update crypt_blowfish to v1.3
* Add '-Wextra' to CFLAGS
* Fix warnings generated by gcc 5.1.1
* Update Autotools

Version 3.0.4
* Fix warnings generated by gcc 4.6

Version 3.0.3
* Fix memory leak
* Fix compiler warnings

Version 3.0.2
* Fix generating salts for MD5

Version 3.0.1
* Fix build failures

Version 3.0
* Add sha256 and sha512 hashes
* Move all hashes into plugins

Version 2.4
* Sync with crypt_blowfish 1.0

Version 2.3
* Fix problems with gcc > 4.0

Version 2.2
* Fix realloc call in md5-crypt

Version 2.1
* Enable x86.S for i386 again

Version 2.0
* Rename all crypt* functions to xcrypt* to avoid clash with normal
  libcrypt from glibc

Version 1.4
* Fix compiling with glibc > 2.3.1
* Sync with crypt_blowfish 0.4.5

Version 1.3
* Sync with current glibc CVS (fix for not correct initialication of
  internal data structs)

Version 1.2
* Fix building with glibc 2.3.x
* Add support for HPPA

Version 1.1
* merge md5.h with xcrypt.h
* Add SHA1 functions and crypt

Version 1.0
* First release
