OATH Toolkit NEWS -- History of user-visible changes.           -*- outline -*-

* Noteworthy changes in release 2.6.14 (2026-01-27) [stable]

** pam_oath: Support null_usersfile_okay parameter.
The argument no_usersfile_okay forces the module to act as if the user
is not present in the config, if the config file does not exist. This
has security implications only use if you know what you are
doing. E.g.  if the file is in a mount like home and that fails to be
mounted, then this will succeed even if the OTP if configured for that
user.  Patch by Luna, Jan Zerebecki, and Miika Alikirri; see
<https://codeberg.org/oath-toolkit/oath-toolkit/pulls/94>.

** pam_oath README: Suggest `KbdInteractiveAuthentication`.
Instead of deprecated `ChallengeResponseAuthentication`.  Patch by
lvgenggeng, see
<https://codeberg.org/oath-toolkit/oath-toolkit/pulls/112>.

** Various build fixes including updated gnulib files.
Fixes building with glibc 2.43, see
<https://codeberg.org/oath-toolkit/oath-toolkit/issues/113>.

* Noteworthy changes in release 2.6.13 (2025-07-29) [stable]

** liboath/libpskc: Fix _FORTIFY_SOURCE build problem and allow configuration.
Some platforms (e.g., Ubuntu 24.10) set _FORTIFY_SOURCE in the default
compiler settings, and this caused build failures since our code
unconditionally #define'd _FORTIFY_SOURCE to 2.  We now allow you to
override the desired level by running, for example ./configure
CPPFLAGS=-D_FORTIFY_SOURCE=3 or CPPFLAGS=-D_FORTIFY_SOURCE=0.

** liboath: Fix --with-openssl builds, and test for it in pipeline.
Reported by Tomasz Kłoczko in
<https://codeberg.org/oath-toolkit/oath-toolkit/issues/36>.

** Git hosting moved from gitlab.com to codeberg.org.
The new URL is https://codeberg.org/oath-toolkit/oath-toolkit although
the old GitLab project will continue to be used for pipelines:
https://gitlab.com/oath-toolkit/oath-toolkit/-/pipelines

** Various build fixes including updated gnulib files.
Gnulib files are no longer stored in git version control.  As a
consequence, gnulib is a required build dependency when building from
git, see CONTRIBUTING.md.

* Noteworthy changes in release 2.6.12 (2024-10-03) [stable]

** pam_oath: Drop privs when ${HOME} is used in the usersfile= setting.
Reported by Fabian Vogt (SUSE), and associated with CVE-2024-47191.
See <https://codeberg.org/oath-toolkit/oath-toolkit/issues/43>.
Security bug triggered by new feature in pam_oath v2.6.7 released on
2021-05-01 with the USER/HOME placeholder strings, see
<https://gitlab.com/oath-toolkit/oath-toolkit/-/merge_requests/12>.

Quoting a writeup in an alternate patch by Matthias Gerstner (SUSE):
With the addition of the possibility to place a usersfile also into a
user's home directory via variable expansion of ${HOME} and ${USER} in
the `usersfile=` path specification, security issues sneaked in.  The
PAM process usually runs with root privileges.  The file operations in
an unprivileged user's home directory follow symlinks both when
reading and creating files, allowing for a potential local root
exploit, because of the `fchown()` performed on the newly created
usersfile.

We drop privileges to the user that is being logged into, assuming it
has the necessary permissions for the usersfile belonging in their
home directory.  This restricts the ability for non-root users to
affect files beyond their control via liboath.

** liboath: Don't follow symbolic links for usersfile updates.
Reported by Fabian Vogt (SUSE), and associated with CVE-2024-47191.
See <https://codeberg.org/oath-toolkit/oath-toolkit/issues/43>.
Security bug triggered by new feature in pam_oath v2.6.7 released on
2021-05-01 with the USER/HOME placeholder strings, see
<https://gitlab.com/oath-toolkit/oath-toolkit/-/merge_requests/12>.

The fix is to open files for writing in exclusive mode (i.e., fail if
the file exists including if it is a symbolic link).

We offer a brief self-test to reproduce the problem in
liboath/tests/tst_fopen-wx.c which you may use as follows:

cc -o tst_fopen-wx tst_fopen-wx.c $(pkg-config --libs --cflags liboath)
rm -f cve.oath cve.oath.new cve.sshd-config cve.oath.lock
printf 'HOTP/E/8\tsilver\t4711\t3132333435363738393031323334353637383930313233343536373839303132\n' > cve.oath
echo my-magic-cookie > cve.sshd-config
ln -s cve.sshd-config cve.oath.new
./tst_fopen-wx cve.oath silver 670691 4711

If this is linked with a vulnerable liboath it will print:

FAIL: Liboath VULNERABLE to fopen(wx) bug.

If you link it to a fixed liboath it will print:

PASS: Your liboath is NOT VULNERABLE to fopen(wx) bug.

For convenience, the liboath/tests/tst_fopen-wx.sh script can be used
to setup and invoke tst_fopen-wx.

** We publish a minimal source-only tarball generated by 'git archive'.
This tarball only contains the files stored in version controlled
sources, and no auxiliary files.  The source-only tarball may be
reproduced on a Trisquel 11 platform using Git at (or near) version
2.46 from Guix.  If something results in the 'git archive' format
changing again, the tarball can only be reproduced using an earlier
system.  The git version in AlmaLinux 8, AlmaLinux 9, RockyLinux 8 and
RockyLinux 9 should all produce the same identical 'git archive'
tarball.  The git version used on Debian 11, PureOS 10, Trisquel 11
and Ubuntu 22.04 should all produce an identical tarball.  These two
'git archive' outputs are not the same, due to how Git works.

** oathtool: Fix test suite on 32-bit big-endian platforms.  Fixes: #44.
Patch by Helge Deller and thanks to Jan Zerebecki.  See
<https://lists.nongnu.org/archive/html/oath-toolkit-help/2024-04/msg00000.html>
and <https://codeberg.org/oath-toolkit/oath-toolkit/issues/44>.

** libpskc: Don't call deprecated xmlMemoryDump.

** libpskc: fix implicit declaration with musl.
See <https://gitlab.com/oath-toolkit/oath-toolkit/-/merge_requests/39>.

** libpskc: Fix linker warning when linked with mold.
Thanks to Jan Palus, see
<https://gitlab.com/oath-toolkit/oath-toolkit/-/merge_requests/30> and
<https://gitlab.com/oath-toolkit/oath-toolkit/-/merge_requests/36> for
regression testing.

** Various build fixes including updated gnulib files.
Fixes Windows tzset build errors, among other things.

* Noteworthy changes in release 2.6.11 (2024-01-11) [stable]

** liboath: Handle invalid base32 encoded secrets.  Fixes: #41.
The gnulib update in version 2.6.10 made the base32 encoding functions
reject invalid encodings, but it appears as if these are wildly used.
We now accept invalid encodings again.  Thanks to Dorancé Martínez and
Seres Bendegúz for reports.

* Noteworthy changes in release 2.6.10 (2024-01-03) [stable]

** Building from git uses a ./bootstrap script instead of 'make bootstrap'.

** Build fixes for Windows.
In particular, don't use filenames "aux.h" and "aux.c" which interact
badly with the AUX special filename.

** Build fixes for Arch Linux.

** Various build fixes including updated gnulib files.
One remaining gnulib self-test disabled.

* Noteworthy changes in release 2.6.9 (2023-07-09) [stable]

** Improve compatibility with recent libxmlsec.

** Update gnulib files, dropping gnulib self-tests.

* Noteworthy changes in release 2.6.8 (2023-07-09) [stable]

** libpskc: Fixes for recent libxmlsec releases.

** pam_oath: Provide fallback pam_modutil_getpwnam implementation.
Fixes <https://codeberg.org/oath-toolkit/oath-toolkit/issues/26> on
Mac OS.  Patch from Nick Gaya <nicholasgaya+github@gmail.com>.

** pam_oath: Don't fail authentication when pam_modutil_getpwnam doesn't
** know the user when usersfile don't include ${USER} or ${HOME}. Closes: #27.
Regression introduced in previous release.  Reported by Nick Gaya
<nicholasgaya+github@gmail.com>.

** pam_oath: Self-test improvements.
Patch from Nick Gaya <nicholasgaya+github@gmail.com>.

** liboath: Builds on Windows.
The oath_authenticate_usersfile function is just a stub that returns
an error.  This allows for use of the rest of the library on Windows.
Thanks to David Woodhouse, see
<https://gitlab.com/oath-toolkit/oath-toolkit/-/merge_requests/15>.

** Disable PAM self-tests on Mac.  Fix --enable-root-tests logic.

** Don't ship gtk-doc PDF's in tarball.

** Use gitlog-to-changelog instead of git2cl.

** Codespell typo fixes.
Patch by Dimitri Papadopoulos.

* Noteworthy changes in release 2.6.7 (2021-05-01) [stable]

** pam_oath: Support variables in usersfile string parameter.
These changes introduce the ${USER} and ${HOME} placeholder values for
the usersfile string in the pam_oath configuration file. The
placeholder values allow the user credentials file to be stored in a
file path that is relative to the user, and mimics similar behavior
found in google-authenticator-libpam.

The motivation for these changes is to allow for non-privileged
processes to use pam_oath (e.g., for 2FA with
xscreensaver). Non-privileged and non-suid programs are unable to use
pam_oath. These changes are a proposed alternative to a suid helper
binary as well.

Thanks to Jason Graham <jgraham@compukix.net> for the patch.  See
<https://gitlab.com/oath-toolkit/oath-toolkit/-/merge_requests/12>.

** doc: Fix project URL in man pages.
Thanks to Jason Graham <jgraham@compukix.net> for the patch.  Fixes
<https://codeberg.org/oath-toolkit/oath-toolkit/issues/19>.

** build: Drop use of libxml's AM_PATH_XML2 in favor of pkg-config.

** build: Modernize autotools usage.
Most importantly, no longer use -Werror with AM_INIT_AUTOMAKE to make
rebuilding from source more safe with future automake versions.

** Updated gnulib files.

* Noteworthy changes in release 2.6.6 (2021-01-20) [stable]

** oathtool: Handle HOTP --counter values larger than 0x7FFFFFFFFFFFFFFF.
Thanks to Jason Lai <jason99.lai@gmail.com> for report.

** doc: GTK-DOC manual improvements.

** Updated gnulib files.
Fixes test-parse-datetime self-check.  Fixes
<https://codeberg.org/oath-toolkit/oath-toolkit/issues/20>.

* Noteworthy changes in release 2.6.5 (2020-12-29) [stable]

** oathtool: Support for reading KEY and OTP from standard input or filename.
KEY and OTP may now be given as '-' to mean stdin, or @FILE to read
from a particular file.  This is recommended on multi-user systems,
since secrets as command line parameters leak.  Based on a patch from
Ian Jackson <ijackson@chiark.greenend.org.uk>.  Fixes #6.

** pam_oath: Fix unlikely logic fail on out of memory conditions.
Patch from Matthias Gerstner.

** Doc fixes.

* Noteworthy changes in release 2.6.4 (2020-11-11) [stable]

** libpskc: New --with-xmlsec-crypto-engine to hard-code crypto engine.
Fixes <https://codeberg.org/oath-toolkit/oath-toolkit/issues/16>.
Use it like --with-xmlsec-crypto-engine=gnutls or
--with-xmlsec-crypto-engine=openssl if the default dynamic loading
fails because of runtime linker search path issues.

** oathtool --totp --verbose now prints TOTP hash mode.
Fixes <https://codeberg.org/oath-toolkit/oath-toolkit/issues/4>.

** oathtool: Hash names (e.g., SHA256) for --totp are now upper case.
Fixes <https://codeberg.org/oath-toolkit/oath-toolkit/issues/3>.
Lower/mixed case hash names are supported for compatibility.

** pam_oath: Fail gracefully for missing users.
Fixes <https://savannah.nongnu.org/support/index.php?109111>.
This allows you to incrementally add support for OATH authentication
instead of forcing it on all users.  See updated pam_oath/README on
the '[user_unknown=ignore success=ok]' parameter that can now be
supplied to PAM configuration.  Patch by Antoine Beaupré
<anarcat@debian.org>.

** Fix libpskc memory corruption bug.
Fixes <https://savannah.nongnu.org/support/?108736>.  Thanks to David
Woodhouse and Jaroslav Škarvada for report, self check and patch.

** Fix man pages.
Fixes <https://savannah.nongnu.org/support/?108312>.  Thanks to
Jaroslav Škarvada for the patch.

** Build fixes.

* Noteworthy changes in release 2.6.3 (2020-11-07) [stable]

** pam_oath: Fix self-tests.

** build: Update gnulib.  Fix compiler warnings.

** Doc fixes.

* Noteworthy changes in release 2.6.2 (2016-08-27) [stable]

** doc: Version controlled source code repository moved to GitLab.

* Noteworthy changes in release 2.6.1 (2015-07-31) [stable]

** liboath: Fix 'make check' on 32-bit systems.
Report and patch by Christian Hesse.

* Noteworthy changes in release 2.6.0 (2015-05-19) [stable]

** liboath: Support TOTP with HMAC-SHA256 and HMAC-SHA512.
This adds new APIs oath_totp_generate2, oath_totp_validate4 and
oath_totp_validate4_callback.

** oathtool: The --totp parameter now take an optional argument to specify MAC.
For example use --totp=sha256 to use HMAC-SHA256.  When --totp is used
the default HMAC-SHA1 is used, as before.

** pam_oath: Mention in README that you shouldn't use insecure keys.
Suggested by Robin.

** pam_oath: Check return value from strdup.
Patch by Eero Häkkinen.

** The files 'gdoc' and 'expect.oath' are now included in the tarball.
Suggested by Jaroslav Škarvada.

* Noteworthy changes in release 2.4.1 (2014-02-12) [stable]

** liboath: Fix usersfile bug that caused it to update the wrong line.
When an usersfile contain multiple lines for the same user but with an
unparsable token type (e.g., HOTP vs TOTP), the code would update the
wrong line of the file.  Since the then updated line could be a
commented out line, this can lead to the same OTP being accepted
multiple times which is a security vulnerability.  Reported by Bas van
Schaik <bas@sj-vs.net> and patch provided by Ilkka Virta
<itvirta@iki.fi>.  CVE-2013-7322

* Noteworthy changes in release 2.4.0 (2013-07-21) [stable]

** liboath: Add new API methods for validating TOTP OTPs
The new methods (oath_totp_validate3 and oath_totp_validate3_callback)
introduce a new parameter *otp_counter, which is set to the actual
counter used to calculate the OTP (unless it is a NULL pointer). This
allows for easier OTP replay detection in applications using liboath.
Patch from Fabian Grünbichler <fabian.gruenbichler@tuwien.ac.at>.

* Noteworthy changes in release 2.2.0 (2013-07-07) [stable]

** libpskc: Add functions for setting PSKC data.
The new functions are pskc_add_keypackage and all pskc_set_* functions
(see libpskc/include/pskc/keypackage.h).  This allow you to write
programs that generate new PSKC structures.

** liboath: Permit different passwords for different tokens for the same user.
Thanks to Christian Hesse <list@eworm.de>.

** build: Improve building from git with most recent automake and gengetopt.
Thanks to Christian Hesse <list@eworm.de>.

** build: Valgrind is not enabled by default.
It causes too much false positives.  For developers who want, use
--enable-valgrind-tests.  It is still enabled by default when building
from the version controlled sources (see cfg.mk).  Thanks to Christian
Hesse <list@eworm.de>.

** liboath: Make header file usable from C++ (extern "C" guard).
Reported by Alan Markus <alan.markus@gmail.com>.

* Noteworthy changes in release 2.0.2 (2013-01-08) [stable]

** oathtool: Base32 decoding of keys are now more liberal in what accepts.
It can now accept keys on the "gr6d 5br7 25s6 vnck v4vl hlao re"
format, i.e., base32 data delimited using SPC and without padding.
The old proper base32 format is still supported.

** liboath: oath_base32_decode now ignores SPC and adds pad characters.

** liboath: If password in usersfile is + then ignore supplied password.
This enables the pam_oath module to be used with external password
verification.  Based on patch from Ilkka Virta <itvirta@iki.fi>.

** tests: Fixed expiry date of some certificates used in the test suite.
The last release would only complete 'make check' during a 30 day window.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 2.0.1 (2012-10-24) [stable]

** libpskc, pskctool: Support sign and verify of PSKC data using XML DigSig.

** libpskc: XML Schema validation modified.
The entire PSKC schema is now supported (before the XML Digital
Signatures and Encryption parts were removed).  The code now assumes
that the schema is available in the local XML catalog.  Thanks to Liam
Quin for hints about XML catalogs.

** pskctool: the --check (-c) parameter was renamed to --info (-i).

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 2.0.0 (2012-10-10) [stable]

** libpskc, pskctool: New components.
The OATH Toolkit now supports the Portable Symmetric Key Container
(PSKC) data format specified in RFC 6030 for dealing with key
provisioning.  There is a new low-level library libpskc for managing
PSKC data for application developers and a new command line tool
pskctool for interacting with PSKC data for users.  The PSKC
functionality depends on Libxml2 <http://xmlsoft.org/>.  It can be
disabled unconditionally using the ./configure-parameter
--disable-pskc.

** liboath: Add manpages for library API.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.12.6 (2012-09-04) [stable]

** liboath: The usersfile is now fflush'ed and fsync'ed.
** liboath: A memory leak fixed.
Patch from Jed Laundry <jlaundry@jlaundry.com>, somewhat modified.

** oathtool: The --counter parameter now works on 32-bit platforms.

** API and ABI is backwards compatible with the previous version.
OATH_FILE_FLUSH_ERROR: Added.
OATH_FILE_SYNC_ERROR: Added.
OATH_FILE_CLOSE_ERROR: Added.
OATH_LAST_ERROR: Added.

* Noteworthy changes in release 1.12.5 (2012-08-19) [stable]

** oathtool: The --counter parameter now supports larger values.
Before it used an 'int' type and now it uses a 'longlong' type.
Needed for eSecuTech tokens as they use a 64-bit value for their
initial counter.  Reported by <cameron.bradley@wiretap.net.nz> see
<https://savannah.nongnu.org/support/?108114>.

** Added gnulib self-tests.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.12.4 (2012-06-17) [stable]

** liboath: Usersfile code handles multiple lines for a single user.
This can be used when a single user carries multiple tokens (with
different OATH secrets) and any of them should be permitted.
Suggested by Tim Eggleston <lists@timeggleston.co.uk>.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.12.3 (2012-05-31) [stable]

** pam_oath: Fix "try_first_pass".
Patch from Christian Hesse <list@eworm.de>.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.12.2 (2012-04-04) [stable]

** liboath: usersfile function now works on FreeBSD.
Reported by Fredrik Lindgren <fredrik@lindgren.pp.se>.

** tests: liboath usersfile self-test is skipped if there is no datefudge.
Reported by Fredrik Lindgren <fredrik@lindgren.pp.se>.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.12.1 (2012-04-01) [stable]

** liboath, oathtool: Base32 decoding now permit lowercase characters.
Reported by Martin Michlmayr <tbm@cyrius.com>.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.12.0 (2012-04-01) [stable]

** oathtool: Added --base32 parameter to decode base32 keys.
Suggested by Martin Michlmayr <tbm@cyrius.com>.

** oathtool: Verbose output (-v) now print key data in base32 format too.

** liboath: Added base32 functions.  Added hex encoding function.
The new APIs are oath_bin2hex, oath_base32_decode, and
oath_base32_encode.

** liboath: Gnulib's snprintf is used for better portability.
The system snprintf is known to have bugs on some systems, see the
Gnulib manual for more information.

** API and ABI is backwards compatible with the previous version.
oath_bin2hex: New function.
oath_base32_decode: New function.
oath_base32_encode: New function.
OATH_INVALID_BASE32: New error code.
OATH_BASE32_OVERFLOW: New error code.
OATH_MALLOC_ERROR: New error code.

* Noteworthy changes in release 1.10.5 (2012-01-03) [stable]

** Build fixes.
From Linus Nordberg <linus@nordberg.se> and Arno Hautala
<arno@alum.wpi.edu>.

** Update gnulib files.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.10.4 (2011-08-12) [stable]

** liboath: Fix build so that OATH_VERSION_NUMBER is actually defined.
It was an empty value in the last release due to a bug in the build
scripts.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.10.3 (2011-08-12) [stable]

** liboath: Allow strcmp callback to return negative to signal errors.
Patch by Daniel Pocock <daniel@pocock.com.au>.

** Fix bugs in build scripts for generating version numbers.

** Update gnulib files.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.10.2 (2011-06-12) [stable]

** liboath: Fix self tests to cope with slow build hosts.
Reported by Christoph Egger <christoph@debian.org> in
<http://bugs.debian.org/630222>.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.10.1 (2011-06-12) [stable]

** liboath: Fix self tests to work regardless of local time zone.

** Update gnulib files.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.10.0 (2011-05-24) [stable]

** liboath: Added new TOTP validation functions that return search position.
Before the absolute value of the search position was in the return
code of the TOTP validate function, but it seems we need to know
whether the search position was before or after the current time.  The
new functions are oath_totp_validate2 and oath_totp_validate2_callback
and behave the same asoath_totp_validate and
oath_totp_validate_callback, respectively, but they take another
optional 'int*' parameter to store the search position.

** liboath: Usersfile can now validate TOTP as well.
Supported algorithms are HOTP/T30/D and HOTP/T60/D where D is 6, 7, or
8 digits.  This means that the PAM module now supports TOTP as well.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.8.2 (2011-05-04) [stable]

** build: Fix conflict between ACLOCAL_AMFLAGS and AC_CONFIG_MACRO_DIR.
Reported by Mitya <mitya@cargosoft.ru>.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.8.1 (2011-05-03) [stable]

** build: Make autoreconf work again.
Reported by Christian Hesse <list@eworm.de>.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.8.0 (2011-05-03) [stable]

** liboath: Add new APIs oath_strerror and oath_strerror_name.
The functions are used to get a human readable description of liboath
error codes.  Suggested by Christian Hesse <mail@eworm.de>.

** liboath: Self-tests improvements.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.6.4 (2011-05-01) [stable]

** liboath: Increase usersfile max secret length to 32 bytes.
Reported by Mitya <mitya@cargosoft.ru>.

** oathtool: Support --window together with --totp.

** pam_oath: Re-add the pam_sm_setcred function and make it return success.
Apparently the function need to exist even if it is not used.
Reported by Christian Hesse <list@eworm.de>.

** pam_oath: Link to -lpam for PAM symbols.
Reported by Mitya <mitya@cargosoft.ru>.

** pam_oath: Don't install pam_oath.la file.
Reported by Mitya <mitya@cargosoft.ru>.

** build: Use pammoddir automake variable instead of overriding libdir.
Reported by Mitya <mitya@cargosoft.ru>.

** build: Make autoreconf work in released tar archives.
Reported by Mitya <mitya@cargosoft.ru>.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.6.3 (2011-04-25) [stable]

** pam_oath: Work under SSH by no-op'ing the setcred function.
Reported by Fanis Dokianakis <fanis@infloop.gr>.

** build: Fix srcdir != builddir issues.
Patches from Linus Nordberg <linus@nordberg.se>.

** build: Gnulib files were updated.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.6.2 (2011-03-10) [stable]

** pam_oath: Add ./configure --enable-root-tests parameter.
Now this configure parameter is needed to run the self-tests that
needs root permission.  The fix in the last release was apparently not
sufficient.  Reported by Jean-Michel Pouré - GOOZE <jmpoure@gooze.eu>.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.6.1 (2011-02-22) [stable]

** pam_oath: Improve reliability of root self test when /etc is not writable.
Reported by Jean-Michel Pouré - GOOZE <jmpoure@gooze.eu>.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.6.0 (2011-02-22) [stable]

** liboath: Added APIs to perform TOTP validation.
The APIs are oath_totp_validate and oath_totp_validate_callback,
similar to the corresponding HOTP functions.

** liboath: The function type oath_hotp_validate_strcmp_function was
** renamed to oath_validate_strcmp_function.
It is used by both HOTP and TOTP validation.  The old name will
continue to work through a compatibility-#define.

** oathtool: Support TOTP validation.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.4.6 (2011-02-07) [stable]

** liboath: Improve portability by using more gnulib modules.
Some non-portable constructions were fixed.  From now on gnulib will
warn for some non-portable constructs.

** Fix some minor clang warnings.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.4.5 (2011-01-27) [stable]

** liboath: Make sure gnulib files are licensed under the LGPLv2.1+.
Thanks to Tollef Fog Heen <tfheen@debian.org>.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.4.4 (2011-01-27) [stable]

** liboath: Fix OATH_VERSION and OATH_VERSION_NUMBER.
I forgot to increment these symbols for the last release.  From now
on, these symbols are generated from the package version instead.

** oathtool: Fix typo in man page.
Patch from Linus Nordberg <linus@nordberg.se>.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.4.3 (2011-01-20) [stable]

** liboath: Really make usersfile logic for '-' passwords work.
Reported by Michael Stevens <mstevens@etla.org>.

** pam_oath: Added better self-test suite (requires root privileges).

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.4.2 (2011-01-16) [stable]

** oathtool: Really replace - with \- in man page, pointed out by lintian.
We now also have a self check to catch any regressions in this area.

** liboath: Make TOTP self check work on platforms with 32-bit time_t.
The final test requires >32 bit time_t.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.4.1 (2011-01-16) [stable]

** liboath: New configure parameter --enable-gcc-warnings.
Use to enable many compiler warnings.  Enabled by default during
development.

** oathtool: Replace - with \- in man page, pointed out by lintian.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.4.0 (2011-01-15) [stable]

** liboath: Added pkg-config script.

** liboath: Support time-variant TOTP based on draft-mraihi-totp-timebased-07.
New function oath_totp_generate.  New symbols
OATH_TOTP_DEFAULT_TIME_STEP_SIZE and OATH_TOTP_DEFAULT_START_TIME for
default system parameters.

** liboath: New API oath_hotp_validate_callback().
Used when you are validating hashed OTPs.  Inspired by discussions
with Daniel Pocock <daniel@pocock.com.au>.

** oathtool: New parameter --totp to generate time-variant TOTP's.
New sub-parameter --time-step-size, --start-time and --now used to
specify TOTP configuration.

** liboath: Added self-tests of validate functions.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.2.2 (2011-01-01) [stable]

** Cleanups related to name change.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.2.1 (2010-12-28) [stable]

** liboath: Install header file "oath.h".
And various other namespace cleanups.

** API and ABI is backwards compatible with the previous version.

* Noteworthy changes in release 1.2.0 (2010-12-27) [stable]

** Project renamed from "HOTP Toolkit" to "OATH Toolkit".

** liboath: The header file is "oath.h" and library is "liboath.so".
Functions were renamed, but functionality is retained so updating code
is a matter of changing the symbol names only.

** oathtool: Renamed from "hotptool".  Added --hotp flag (the default).
This is to plan for the future when the tool will also support TOTP/OCRA.

** pam_oath: Renamed from pam_hotp.

** API and ABI is not backwards compatible.

* Noteworthy changes in release 1.0.1 (2010-12-27) [stable]

** libhotp: Fix build failure due to missing sys/stat.h include on FreeBSD 7.2.
Reported by Kevin Quinlan <Kevin.Quinlan@polidoris.com>.

** libhotp: Make usersfile logic for '-' passwords work.
Reported by Rick van Rein <rick@openfortress.nl>.

** libhotp DOC: Added GTK-DOC manual in PDF format.

** build: Gnulib files were updated.

* Noteworthy changes in release 1.0.0 (2009-12-08) [stable]

** Initial release.

```
Copyright (C) 2009-2026 Simon Josefsson

This file is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.

This file is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this file.  If not, see <http://www.gnu.org/licenses/>.
```
