From 7906d1f7c8ba7545b7b4bdec7481d682f79eedf4 Mon Sep 17 00:00:00 2001 From: "Charles R. Portwood II" Date: Sat, 17 Jun 2017 16:45:14 -0500 Subject: [PATCH] Compatibility with libargon2 versions 20161029 and 20160821 libargon2 20161029 introduces the `type` parameter to the argon2_encodedlen function that is not present in 20160821. This change ensures the Argon2 functionality introduced in RFC `argon2_password_hash` is compatible with both versions, as the library version that package maintainers package may differ. --- ext/standard/config.m4 | 9 +++++++++ ext/standard/config.w32 | 3 +++ ext/standard/password.c | 3 +++ 3 files changed, 15 insertions(+) diff --git a/ext/standard/config.m4 b/ext/standard/config.m4 index 284e74e967ea7..80c3db631f883 100644 --- a/ext/standard/config.m4 +++ b/ext/standard/config.m4 @@ -433,12 +433,21 @@ if test "$PHP_PASSWORD_ARGON2" != "no"; then PHP_ADD_LIBRARY_WITH_PATH(argon2, $ARGON2_DIR/$PHP_LIBDIR) PHP_ADD_INCLUDE($ARGON2_DIR/include) + AC_MSG_CHECKING([for argon2_hash function]) AC_CHECK_LIB(argon2, argon2_hash, [ LIBS="$LIBS -largon2" AC_DEFINE(HAVE_ARGON2LIB, 1, [ Define to 1 if you have the header file ]) ], [ AC_MSG_ERROR([Problem with libargon2.(a|so). Please verify that Argon2 header and libaries are installed]) ]) + + AC_MSG_CHECKING([for argon2id_hash_raw function]) + AC_CHECK_LIB(argon2, argon2id_hash_raw, [ + LIBS="$LIBS -largon2" + AC_DEFINE(HAVE_ARGON2ID, 1, [ Define to 1 if Argon2 library has support for Argon2ID]) + ], [ + AC_MSG_RESULT([not found]) + ]) fi dnl diff --git a/ext/standard/config.w32 b/ext/standard/config.w32 index 00b2166abe876..ee1935fe87257 100644 --- a/ext/standard/config.w32 +++ b/ext/standard/config.w32 @@ -7,6 +7,9 @@ if (PHP_PASSWORD_ARGON2 != "no") { if (CHECK_LIB("argon2_a.lib;argon2.lib", null, PHP_PASSWORD_ARGON2) && CHECK_HEADER_ADD_INCLUDE("argon2.h", "CFLAGS")) { AC_DEFINE('HAVE_ARGON2LIB', 1); + if (CHECK_FUNC_IN_HEADER("argon2.h", "argon2id_hash_raw", PHP_PHP_BUILD + "\\include", "CFLAGS")) { + AC_DEFINE('HAVE_ARGON2ID', 1); + } } else { WARNING("Argon2 not enabled; libaries and headers not found"); } diff --git a/ext/standard/password.c b/ext/standard/password.c index 2d04badd1b087..5e1704fe6952f 100644 --- a/ext/standard/password.c +++ b/ext/standard/password.c @@ -545,6 +545,9 @@ PHP_FUNCTION(password_hash) threads, (uint32_t)salt_len, out_len +#if HAVE_ARGON2ID + , type +#endif ); out = emalloc(out_len + 1);