summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRemi Collet <remi@php.net>2019-07-15 14:11:30 +0200
committerRemi Collet <remi@php.net>2019-07-15 14:11:30 +0200
commita7ff3a648336c33cfd8c7b63199bc7b0e49fbdea (patch)
tree8158717ed8ecb594ccfca475aba9d3de6bba8699
parent193f28c7d557df887c4456d072113cc2478e1c3e (diff)
downloadphp-git-a7ff3a648336c33cfd8c7b63199bc7b0e49fbdea.tar.gz
Fix #78269 password_hash uses weak options for argon2
-rw-r--r--NEWS1
-rw-r--r--ext/standard/php_password.h6
-rw-r--r--ext/standard/tests/password/password_needs_rehash_argon2.phpt14
3 files changed, 9 insertions, 12 deletions
diff --git a/NEWS b/NEWS
index 2720214724..9c9b805cf6 100644
--- a/NEWS
+++ b/NEWS
@@ -46,6 +46,7 @@ PHP NEWS
- Standard:
. Fixed #78241 (touch() does not handle dates after 2038 in PHP 64-bit). (cmb)
+ . Fixed bug #78269 (password_hash uses weak options for argon2). (Remi)
04 Jul 2019, PHP 7.3.7
diff --git a/ext/standard/php_password.h b/ext/standard/php_password.h
index 0c2f83c650..f9b55be8f6 100644
--- a/ext/standard/php_password.h
+++ b/ext/standard/php_password.h
@@ -31,9 +31,9 @@ PHP_MINIT_FUNCTION(password);
#define PHP_PASSWORD_BCRYPT_COST 10
#if HAVE_ARGON2LIB
-#define PHP_PASSWORD_ARGON2_MEMORY_COST 1<<10
-#define PHP_PASSWORD_ARGON2_TIME_COST 2
-#define PHP_PASSWORD_ARGON2_THREADS 2
+#define PHP_PASSWORD_ARGON2_MEMORY_COST (64 << 10)
+#define PHP_PASSWORD_ARGON2_TIME_COST 4
+#define PHP_PASSWORD_ARGON2_THREADS 1
#endif
typedef enum {
diff --git a/ext/standard/tests/password/password_needs_rehash_argon2.phpt b/ext/standard/tests/password/password_needs_rehash_argon2.phpt
index 9552be1dc9..69588d02ad 100644
--- a/ext/standard/tests/password/password_needs_rehash_argon2.phpt
+++ b/ext/standard/tests/password/password_needs_rehash_argon2.phpt
@@ -10,24 +10,20 @@ if (!defined('PASSWORD_ARGON2ID')) die('skip password_hash not built with Argon2
$hash = password_hash('test', PASSWORD_ARGON2I);
var_dump(password_needs_rehash($hash, PASSWORD_ARGON2I));
-var_dump(password_needs_rehash($hash, PASSWORD_ARGON2I, ['memory_cost' => 1<<17]));
-var_dump(password_needs_rehash($hash, PASSWORD_ARGON2I, ['time_cost' => 4]));
-var_dump(password_needs_rehash($hash, PASSWORD_ARGON2I, ['threads' => 4]));
+var_dump(password_needs_rehash($hash, PASSWORD_ARGON2I, ['memory_cost' => PASSWORD_ARGON2_DEFAULT_MEMORY_COST * 2]));
+var_dump(password_needs_rehash($hash, PASSWORD_ARGON2I, ['time_cost' => PASSWORD_ARGON2_DEFAULT_TIME_COST + 1]));
$hash = password_hash('test', PASSWORD_ARGON2ID);
var_dump(password_needs_rehash($hash, PASSWORD_ARGON2ID));
-var_dump(password_needs_rehash($hash, PASSWORD_ARGON2ID, ['memory_cost' => 1<<17]));
-var_dump(password_needs_rehash($hash, PASSWORD_ARGON2ID, ['time_cost' => 4]));
-var_dump(password_needs_rehash($hash, PASSWORD_ARGON2ID, ['threads' => 4]));
+var_dump(password_needs_rehash($hash, PASSWORD_ARGON2ID, ['memory_cost' => PASSWORD_ARGON2_DEFAULT_MEMORY_COST * 2]));
+var_dump(password_needs_rehash($hash, PASSWORD_ARGON2ID, ['time_cost' => PASSWORD_ARGON2_DEFAULT_TIME_COST + 1]));
+
echo "OK!";
-?>
--EXPECT--
bool(false)
bool(true)
bool(true)
-bool(true)
bool(false)
bool(true)
bool(true)
-bool(true)
OK!