From 5f5d934d58860f39e597c0c457a9382ea83cc247 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Wed, 30 Jul 2025 23:02:28 +0800 Subject: [PATCH] Add openssl argon2 password hash support for PHP 8.5 --- src/SPC/builder/extension/openssl.php | 10 +++++++++- src/SPC/builder/linux/library/openssl.php | 4 ++-- src/SPC/builder/macos/library/openssl.php | 2 ++ src/SPC/builder/unix/library/openssl.php | 21 +++++++++++++++++++++ src/globals/ext-tests/openssl.php | 3 +++ 5 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 src/SPC/builder/unix/library/openssl.php diff --git a/src/SPC/builder/extension/openssl.php b/src/SPC/builder/extension/openssl.php index fc4831f3..08df47f7 100644 --- a/src/SPC/builder/extension/openssl.php +++ b/src/SPC/builder/extension/openssl.php @@ -26,6 +26,14 @@ class openssl extends Extension public function getUnixConfigureArg(bool $shared = false): string { $openssl_dir = $this->builder->getPHPVersionID() >= 80400 ? '' : ' --with-openssl-dir=' . BUILD_ROOT_PATH; - return '--with-openssl=' . ($shared ? 'shared,' : '') . BUILD_ROOT_PATH . $openssl_dir; + $args = '--with-openssl=' . ($shared ? 'shared,' : '') . BUILD_ROOT_PATH . $openssl_dir; + if ( + $this->builder->getPHPVersionID() >= 80500 && + ($ver = $this->builder->getLib('openssl')->getLibVersion()) && + version_compare($ver, '3.2.0', '>=') + ) { + $args .= ' --with-openssl-argon2 OPENSSL_LIBS="-lz"'; + } + return $args; } } diff --git a/src/SPC/builder/linux/library/openssl.php b/src/SPC/builder/linux/library/openssl.php index 51633ac2..401bb3d7 100644 --- a/src/SPC/builder/linux/library/openssl.php +++ b/src/SPC/builder/linux/library/openssl.php @@ -29,6 +29,8 @@ use SPC\store\FileSystem; class openssl extends LinuxLibraryBase { + use \SPC\builder\unix\library\openssl; + public const NAME = 'openssl'; /** @@ -38,8 +40,6 @@ class openssl extends LinuxLibraryBase */ public function build(): void { - [,,$destdir] = SEPARATED_PATH; - $extra = ''; $ex_lib = '-ldl -pthread'; $arch = getenv('SPC_ARCH'); diff --git a/src/SPC/builder/macos/library/openssl.php b/src/SPC/builder/macos/library/openssl.php index c1826b5c..3edc15e7 100644 --- a/src/SPC/builder/macos/library/openssl.php +++ b/src/SPC/builder/macos/library/openssl.php @@ -28,6 +28,8 @@ use SPC\store\FileSystem; class openssl extends MacOSLibraryBase { + use \SPC\builder\unix\library\openssl; + public const NAME = 'openssl'; /** diff --git a/src/SPC/builder/unix/library/openssl.php b/src/SPC/builder/unix/library/openssl.php new file mode 100644 index 00000000..4acef78c --- /dev/null +++ b/src/SPC/builder/unix/library/openssl.php @@ -0,0 +1,21 @@ +source_dir}/VERSION.dat")) { + // parse as INI + $version = parse_ini_file("{$this->source_dir}/VERSION.dat"); + if ($version !== false) { + return "{$version['MAJOR']}.{$version['MINOR']}.{$version['PATCH']}"; + } + } + return null; + } +} diff --git a/src/globals/ext-tests/openssl.php b/src/globals/ext-tests/openssl.php index 0453101a..79c86323 100644 --- a/src/globals/ext-tests/openssl.php +++ b/src/globals/ext-tests/openssl.php @@ -7,3 +7,6 @@ assert(openssl_digest('123456', 'md5') === 'e10adc3949ba59abbe56e057f20f883e'); if (file_exists('/etc/ssl/openssl.cnf')) { assert(file_get_contents('https://captive.apple.com/') !== false); } +if (PHP_VERSION_ID >= 80500 && defined('OPENSSL_VERSION_NUMBER') && OPENSSL_VERSION_NUMBER >= 0x30200000) { + assert(function_exists('openssl_password_hash')); +}