From 5dfba1b06473ecb0298d9b61fd9dec28ac60f884 Mon Sep 17 00:00:00 2001 From: rxu Date: Sat, 28 Dec 2019 00:15:08 +0700 Subject: [ticket/16266] Optimize code PHPBB3-16266 --- phpBB/phpbb/passwords/driver/argon2i.php | 21 ++++++--------------- phpBB/phpbb/passwords/driver/base_native.php | 9 ++++++++- 2 files changed, 14 insertions(+), 16 deletions(-) (limited to 'phpBB') diff --git a/phpBB/phpbb/passwords/driver/argon2i.php b/phpBB/phpbb/passwords/driver/argon2i.php index 3babbaa780..9aa2b6f14c 100644 --- a/phpBB/phpbb/passwords/driver/argon2i.php +++ b/phpBB/phpbb/passwords/driver/argon2i.php @@ -37,21 +37,12 @@ class argon2i extends base_native { parent::__construct($config, $helper); - if ($this->is_sodium()) - { - // For Sodium implementation, set special cost factor values (since PHP 7.4) - // See https://wiki.php.net/rfc/sodium.argon.hash and PHPBB3-16266 - $this->memory_cost = max($memory_cost, 256*1024); - $this->threads = 1; - $this->time_cost = max($time_cost, 3); - } - else - { - // Otherwise don't allow cost factors to be below default settings - $this->memory_cost = max($memory_cost, 1024); - $this->threads = max($threads, 2); - $this->time_cost = max($time_cost, 2); - } + // For Sodium implementation, set special cost factor values (since PHP 7.4) + // See https://wiki.php.net/rfc/sodium.argon.hash and PHPBB3-16266 + // Otherwise don't allow cost factors to be below default settings + $this->memory_cost = ($this->is_sodium()) ? max($memory_cost, 256*1024) : max($memory_cost, 1024); + $this->threads = ($this->is_sodium()) ? 1 : max($threads, 2); + $this->time_cost = ($this->is_sodium()) ? max($time_cost, 3) : max($time_cost, 2); } /** diff --git a/phpBB/phpbb/passwords/driver/base_native.php b/phpBB/phpbb/passwords/driver/base_native.php index 31d3465165..fa4f0995a5 100644 --- a/phpBB/phpbb/passwords/driver/base_native.php +++ b/phpBB/phpbb/passwords/driver/base_native.php @@ -66,7 +66,14 @@ abstract class base_native extends base */ public function is_sodium() { - return defined('PASSWORD_ARGON2_PROVIDER') && PASSWORD_ARGON2_PROVIDER == 'sodium'; + static $is_sodium; + + if (empty($is_sodium)) + { + $is_sodium = defined('PASSWORD_ARGON2_PROVIDER') && PASSWORD_ARGON2_PROVIDER == 'sodium'; + } + + return $is_sodium; } /** -- cgit v1.2.1