Add `#[\SensitiveParameter]` attribute to a large number of parameters
authorTim Düsterhus <duesterhus@woltlab.com>
Tue, 7 Jun 2022 14:46:28 +0000 (16:46 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Tue, 7 Jun 2022 14:46:28 +0000 (16:46 +0200)
see #4802

39 files changed:
wcfsetup/install/files/lib/acp/form/UserAddForm.class.php
wcfsetup/install/files/lib/acp/form/UserEditForm.class.php
wcfsetup/install/files/lib/action/TwitterAuthAction.class.php
wcfsetup/install/files/lib/data/package/update/server/PackageUpdateServer.class.php
wcfsetup/install/files/lib/data/user/UserEditor.class.php
wcfsetup/install/files/lib/form/RegisterForm.class.php
wcfsetup/install/files/lib/system/database/Database.class.php
wcfsetup/install/files/lib/system/email/transport/SmtpEmailTransport.class.php
wcfsetup/install/files/lib/system/exporter/AbstractExporter.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Argon2.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Bcrypt.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/CryptMD5.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/DoubleBcrypt.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Drupal8.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Invalid.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Ipb2.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Ipb3.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Joomla1.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Joomla2.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Joomla3.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Mybb1.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Phpass.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Phpbb3.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Phpfox3.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Smf1.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Smf2.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/TPhpass.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Vb3.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Vb4.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Vb5.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Vb5Argon2.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Vb5Bcrypt.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Wbb2.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Wcf1.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Wcf1e.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Wcf2.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Xf1.class.php
wcfsetup/install/files/lib/system/user/authentication/password/algorithm/Xf12.class.php
wcfsetup/install/files/lib/system/user/multifactor/totp/Totp.class.php

index e93fbc11297270bd4a56d562afc7d78cf97c5921..46e8991c1aecfd042538e7f6d5b9aba6d95067d1 100644 (file)
@@ -383,8 +383,12 @@ class UserAddForm extends UserOptionListForm
      * @param string $confirmPassword
      * @throws  UserInputException
      */
-    protected function validatePassword($password, $confirmPassword)
-    {
+    protected function validatePassword(
+        #[\SensitiveParameter]
+        $password,
+        #[\SensitiveParameter]
+        $confirmPassword
+    ) {
         if (empty($password)) {
             throw new UserInputException('password');
         }
index ec47c5214c05805625671c4b36941dca6e68d4ba..71fc12bed59271ec4a14f6b922bf0582ec2c583f 100755 (executable)
@@ -581,8 +581,12 @@ class UserEditForm extends UserAddForm
     /**
      * @inheritDoc
      */
-    protected function validatePassword($password, $confirmPassword)
-    {
+    protected function validatePassword(
+        #[\SensitiveParameter]
+        $password,
+        #[\SensitiveParameter]
+        $confirmPassword
+    ) {
         if (!empty($password) || !empty($confirmPassword)) {
             parent::validatePassword($password, $confirmPassword);
         }
index a83e55a753aa9c7a3387aa6b2eee5fd601fe0695..e999525929b1d00bbe8bad7763b04b8fec0b2bcd 100644 (file)
@@ -371,8 +371,13 @@ class TwitterAuthAction extends AbstractAction
      * @param string $method
      * @return  string
      */
-    public function createSignature($url, array $parameters, $tokenSecret = '', $method = 'POST')
-    {
+    public function createSignature(
+        $url,
+        array $parameters,
+        #[\SensitiveParameter]
+        $tokenSecret = '',
+        $method = 'POST'
+    ) {
         $tmp = [];
         foreach ($parameters as $key => $val) {
             $tmp[\rawurlencode($key)] = \rawurlencode($val);
index 438c567a6e3527a11593989828bb02e86b354353..8585adc050818cbe96b44591ead85c208934beca 100644 (file)
@@ -194,8 +194,13 @@ class PackageUpdateServer extends DatabaseObject
      * @param string $password
      * @param bool $saveCredentials
      */
-    public static function storeAuthData($packageUpdateServerID, $username, $password, $saveCredentials = false)
-    {
+    public static function storeAuthData(
+        $packageUpdateServerID,
+        $username,
+        #[\SensitiveParameter]
+        $password,
+        $saveCredentials = false
+    ) {
         $packageUpdateAuthData = @\unserialize(WCF::getSession()->getVar('packageUpdateAuthData'));
         if ($packageUpdateAuthData === null || !\is_array($packageUpdateAuthData)) {
             $packageUpdateAuthData = [];
index d4ffc0a9231be4a0e1df869d23d4fe60c5ffdbf9..b726bd1f29226755ae491697bb21a353cda0f8e3 100644 (file)
@@ -45,8 +45,10 @@ class UserEditor extends DatabaseObjectEditor implements IEditableCachedObject
      *
      * @since 5.4
      */
-    private static function getPasswordHash(?string $password = null): string
-    {
+    private static function getPasswordHash(
+        #[\SensitiveParameter]
+        ?string $password = null
+    ): string {
         $manager = PasswordAlgorithmManager::getInstance();
 
         $algorithm = $manager->getDefaultAlgorithm();
index 02275feb4b5df30e9aeb53cc89af56c3f221856a..5a5ca64d46b99c963c95a36bd28966738918ef58 100644 (file)
@@ -331,8 +331,12 @@ class RegisterForm extends UserAddForm
     /**
      * @inheritDoc
      */
-    protected function validatePassword($password, $confirmPassword)
-    {
+    protected function validatePassword(
+        #[\SensitiveParameter]
+        $password,
+        #[\SensitiveParameter]
+        $confirmPassword
+    ) {
         if (!$this->isExternalAuthentication) {
             parent::validatePassword($password, $confirmPassword);
 
index 4aa63d315b69a60ef43d2233a60a9f19b055616a..a36da89f027fbd19db83639ea29cb56081653f6b 100644 (file)
@@ -122,6 +122,7 @@ abstract class Database
     public function __construct(
         $host,
         $user,
+        #[\SensitiveParameter]
         $password,
         $database,
         $port,
index 649e5745f696c33bc565bbbabd4d388ef84c4849..603b3a892b1babc58450bd4fa12e5a810f57194d 100644 (file)
@@ -91,6 +91,7 @@ class SmtpEmailTransport implements IStatusReportingEmailTransport
         $host = MAIL_SMTP_HOST,
         $port = MAIL_SMTP_PORT,
         $username = MAIL_SMTP_USER,
+        #[\SensitiveParameter]
         $password = MAIL_SMTP_PASSWORD,
         $starttls = MAIL_SMTP_STARTTLS
     ) {
index 43b44257b2882096b7e082bb1a7a1dc9145602f0..6931d2877538f2e7484602d062b5356565f49f7c 100644 (file)
@@ -94,6 +94,7 @@ abstract class AbstractExporter implements IExporter
     public function setData(
         $databaseHost,
         $databaseUser,
+        #[\SensitiveParameter]
         $databasePassword,
         $databaseName,
         $databasePrefix,
index ab81df3d86f3f1463ac7d065a3f09ff5855ece24..0f400383fe3f251525e4929ff310680fc14f2582 100644 (file)
@@ -24,16 +24,21 @@ final class Argon2 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         return \password_verify($password, $hash);
     }
 
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         return \password_hash($password, \PASSWORD_ARGON2I, self::OPTIONS);
     }
 
index 0fa4a86db12cbc41b83da0e0e03ec3e2bbb9aeb7..62b1b4bb75c2ef291375c27c00deab698827d221 100644 (file)
@@ -44,16 +44,21 @@ final class Bcrypt implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         return \password_verify($password, $hash);
     }
 
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         return \password_hash($password, \PASSWORD_BCRYPT, $this->getOptions());
     }
 
index e8016aec4bd121ff71e5dbb24165b9d4da51ac97..54ed89d5297d681ffc904d51cca6df566fcd58aa 100644 (file)
@@ -19,8 +19,11 @@ final class CryptMD5 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         // The passwords are stored differently when importing. Sometimes they are saved with the salt,
         // but sometimes also without the salt. We don't need the salt, because the salt is saved with the hash.
         [$hash] = \explode(':', $hash, 2);
@@ -31,8 +34,10 @@ final class CryptMD5 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = '$1$' . Hex::encode(\random_bytes(6)) . '$';
 
         return $this->hashWithSalt($password, $salt);
@@ -41,8 +46,11 @@ final class CryptMD5 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         return \crypt($password, $salt);
     }
 
index 9a21f3e7a4d55a3813dea9d24fde59c5b3dbf2a3..0165698da5ecd268d1ed80922daa2c150a97516d 100644 (file)
@@ -33,16 +33,21 @@ final class DoubleBcrypt implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         return \hash_equals($hash, self::getDoubleSaltedHash($password, $hash));
     }
 
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         return self::getDoubleSaltedHash($password);
     }
 
@@ -69,8 +74,11 @@ final class DoubleBcrypt implements IPasswordAlgorithm
      * @param string $salt
      * @return  string
      */
-    private static function getDoubleSaltedHash($password, $salt = null)
-    {
+    private static function getDoubleSaltedHash(
+        #[\SensitiveParameter]
+        $password,
+        $salt = null
+    ) {
         if ($salt === null) {
             $salt = self::getRandomSalt();
         }
@@ -85,8 +93,11 @@ final class DoubleBcrypt implements IPasswordAlgorithm
      * @param string $salt
      * @return  string
      */
-    private static function getSaltedHash($password, $salt = null)
-    {
+    private static function getSaltedHash(
+        #[\SensitiveParameter]
+        $password,
+        $salt = null
+    ) {
         if ($salt === null) {
             $salt = self::getRandomSalt();
         }
index 37037d355cad0449014ae47543b2b25b848d1489..4ca4f75cba69b154db963ac76d6443f5cdc5f694 100644 (file)
@@ -23,8 +23,11 @@ final class Drupal8 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, with the given settings.
      */
-    private function hashDrupal(string $password, string $settings): string
-    {
+    private function hashDrupal(
+        #[\SensitiveParameter]
+        string $password,
+        string $settings
+    ): string {
         $output = $this->hashPhpass($password, $settings);
 
         return \mb_substr($output, 0, 55, '8bit');
@@ -33,8 +36,11 @@ final class Drupal8 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         // The passwords are stored differently when importing. Sometimes they are saved with the salt,
         // but sometimes also without the salt. We don't need the salt, because the salt is saved with the hash.
         [$hash] = \explode(':', $hash, 2);
@@ -45,8 +51,10 @@ final class Drupal8 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(4));
 
         return $this->hashDrupal($password, $this->getSettings() . $salt) . ':';
index 4dcff695b58ccba91b69bba32700d58205f8e9b3..e7425cc4f529a16ee598077d101999ff29a9531b 100644 (file)
@@ -18,16 +18,21 @@ final class Invalid implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         return false;
     }
 
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         return '';
     }
 
index 3b29d8c81eef516fb35fb3e3d706e22756e0c0eb..8c8c7d30056f4b789deadd3dec4a2ff949fdaae5 100644 (file)
@@ -19,8 +19,11 @@ final class Ipb2 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         $parts = \explode(':', $hash, 2);
         $hash = $parts[0];
         $salt = $parts[1] ?? '';
@@ -31,8 +34,10 @@ final class Ipb2 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(20));
 
         return $this->hashWithSalt($password, $salt) . ':' . $salt;
@@ -41,8 +46,11 @@ final class Ipb2 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         return \md5(\md5($password) . $salt);
     }
 
index 18c70aa90fcc28f4c128762fea35534ec62e0e24..09f12a8793e54aba7809437b3388531d288a3319 100644 (file)
@@ -19,8 +19,11 @@ final class Ipb3 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         $parts = \explode(':', $hash, 2);
         $hash = $parts[0];
         $salt = $parts[1] ?? '';
@@ -31,8 +34,10 @@ final class Ipb3 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(20));
 
         return $this->hashWithSalt($password, $salt) . ':' . $salt;
@@ -41,8 +46,11 @@ final class Ipb3 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         return \md5(\md5($salt) . \md5($password));
     }
 
index edef893326af13bfe6bd5c9a9aea8af5bd6e5de1..a08264f82c084ae7ae18f9971ba7ce3c816c0e3e 100644 (file)
@@ -19,8 +19,11 @@ final class Joomla1 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         $parts = \explode(':', $hash, 2);
         $hash = $parts[0];
         $salt = $parts[1] ?? '';
@@ -31,8 +34,10 @@ final class Joomla1 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(20));
 
         return $this->hashWithSalt($password, $salt) . ':' . $salt;
@@ -41,8 +46,11 @@ final class Joomla1 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         return \md5($password . $salt);
     }
 
index 2bf2dd073f5ee075227a4b86f4cd7e1dbd906fab..bb660a6c56b74db8126926d63dc9eef4a9e65f4b 100644 (file)
@@ -19,8 +19,11 @@ final class Joomla2 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         $parts = \explode(':', $hash, 2);
         $hash = $parts[0];
         $salt = $parts[1] ?? '';
@@ -31,8 +34,10 @@ final class Joomla2 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(20));
 
         return $this->hashWithSalt($password, $salt) . ':' . $salt;
@@ -41,8 +46,11 @@ final class Joomla2 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         return \md5($password . $salt);
     }
 
index 1647cef5e1bc68e9b12c2557a03a1856d38c7be4..ee11d8e0b6a8da939a21f94a7013a9f4013282a8 100644 (file)
@@ -19,8 +19,11 @@ final class Joomla3 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         $parts = \explode(':', $hash, 2);
         $hash = $parts[0];
         $salt = $parts[1] ?? '';
@@ -31,8 +34,10 @@ final class Joomla3 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(20));
 
         return $this->hashWithSalt($password, $salt) . ':' . $salt;
@@ -41,8 +46,11 @@ final class Joomla3 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         return \md5($password . $salt);
     }
 
index a436b6fcbee0d7a75fbe5cab84ee8e6312cd1873..9b4943610443cf4482d9c179cd44f2505b1aa627 100644 (file)
@@ -19,8 +19,11 @@ final class Mybb1 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         $parts = \explode(':', $hash, 2);
         $hash = $parts[0];
         $salt = $parts[1] ?? '';
@@ -31,8 +34,10 @@ final class Mybb1 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(20));
 
         return $this->hashWithSalt($password, $salt) . ':' . $salt;
@@ -41,8 +46,11 @@ final class Mybb1 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         return \md5(\md5($salt) . \md5($password));
     }
 
index 9ed648f762d67d05143e098513da6fe5c4a95f1c..52870fd3dcfa00965595da40d99f998b13a13555 100644 (file)
@@ -23,8 +23,10 @@ final class Phpass implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(4));
 
         return $this->hashPhpass($password, $this->getSettings() . $salt) . ':';
index 149f555144be7ef4efdb6a165c378161a1f7c189..569fe50f95b4613ec86778f72e272312bf352cb2 100644 (file)
@@ -20,8 +20,11 @@ final class Phpbb3 implements IPasswordAlgorithm
         verify as phpassVerify;
     }
 
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         if ($this->phpassVerify($password, $hash)) {
             return true;
         }
@@ -70,8 +73,10 @@ final class Phpbb3 implements IPasswordAlgorithm
         return false;
     }
 
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         throw new NotImplementedException();
     }
 }
index b4d4ce9c0c24af7d54025a6625eb65c018693d28..9fc352b8f251b55b9f1c481ef4f625409b7b2c25 100644 (file)
@@ -19,8 +19,11 @@ final class Phpfox3 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         $parts = \explode(':', $hash, 2);
         $hash = $parts[0];
         $salt = $parts[1] ?? '';
@@ -31,8 +34,10 @@ final class Phpfox3 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(20));
 
         return $this->hashWithSalt($password, $salt) . ':' . $salt;
@@ -41,8 +46,11 @@ final class Phpfox3 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         return \md5(\md5($password) . \md5($salt));
     }
 
index 298bd2ef0df4e1e6eb1ed4ea8919228312f8a647..c5ad0b17e024e5b4e11dca446514399bfa987376 100644 (file)
@@ -19,8 +19,11 @@ final class Smf1 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         $parts = \explode(':', $hash, 2);
         $hash = $parts[0];
         $salt = $parts[1] ?? '';
@@ -31,8 +34,10 @@ final class Smf1 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(20));
 
         return $this->hashWithSalt($password, $salt) . ':' . $salt;
@@ -41,8 +46,11 @@ final class Smf1 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         return \sha1($salt . $password);
     }
 
index c419ed378d7dc3532129ea2742215378c6b21d64..d85eea87c2cbd3df165a7671d6fff45f96050a11 100644 (file)
@@ -19,8 +19,11 @@ final class Smf2 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         $parts = \explode(':', $hash, 2);
         $hash = $parts[0];
         $salt = $parts[1] ?? '';
@@ -31,8 +34,10 @@ final class Smf2 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(20));
 
         return $this->hashWithSalt($password, $salt) . ':' . $salt;
@@ -41,8 +46,11 @@ final class Smf2 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         return \sha1($salt . $password);
     }
 
index c684b75264808347b35489727bca5df12683561a..b674a851150fb5faad9df4b0161576e2134152c9 100644 (file)
@@ -20,8 +20,11 @@ trait TPhpass
     /**
      * Returns the hashed password, with the given settings.
      */
-    private function hashPhpass(string $password, string $settings): string
-    {
+    private function hashPhpass(
+        #[\SensitiveParameter]
+        string $password,
+        string $settings
+    ): string {
         $output = '*';
 
         // Check for correct hash
@@ -107,8 +110,11 @@ trait TPhpass
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         // The passwords are stored differently when importing. Sometimes they are saved with the salt,
         // but sometimes also without the salt. We don't need the salt, because the salt is saved with the hash.
         [$hash] = \explode(':', $hash, 2);
@@ -123,8 +129,10 @@ trait TPhpass
     /**
      * @deprecated 5.5 Use Phpass::hash() instead.
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $settings = '$H$8';
         $settings .= Hex::encode(\random_bytes(4));
 
index af61345112799c329e7243b4c95777dd0c8d0a07..0e8a0b5f623ba110c003dd34026ad736b6c20cb3 100644 (file)
@@ -19,8 +19,11 @@ final class Vb3 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         $parts = \explode(':', $hash, 2);
         $hash = $parts[0];
         $salt = $parts[1] ?? '';
@@ -31,8 +34,10 @@ final class Vb3 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(20));
 
         return $this->hashWithSalt($password, $salt) . ':' . $salt;
@@ -41,8 +46,11 @@ final class Vb3 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         return \md5(\md5($password) . $salt);
     }
 
index a3cee6f805b4d43eb276952c209bf7bb83cfbe26..9194f149b817b5cb7922e0b2323f54f36b2e4475 100644 (file)
@@ -19,8 +19,11 @@ final class Vb4 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         $parts = \explode(':', $hash, 2);
         $hash = $parts[0];
         $salt = $parts[1] ?? '';
@@ -31,8 +34,10 @@ final class Vb4 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(20));
 
         return $this->hashWithSalt($password, $salt) . ':' . $salt;
@@ -41,8 +46,11 @@ final class Vb4 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         return \md5(\md5($password) . $salt);
     }
 
index ca1afdaa6cb58ca6ecf77ad4baced6341585d9be..13481b61ad801a12ee24623b65b906987905ff95 100644 (file)
@@ -19,8 +19,11 @@ final class Vb5 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         $parts = \explode(':', $hash, 2);
         $hash = $parts[0];
         $salt = $parts[1] ?? '';
@@ -31,8 +34,10 @@ final class Vb5 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(20));
 
         return $this->hashWithSalt($password, $salt) . ':' . $salt;
@@ -41,8 +46,11 @@ final class Vb5 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         return \md5(\md5($password) . $salt);
     }
 
index dafcb7715be2800e089c606bc64cec778039b9ed..550c5ae95288015981c00e56b69a059621c9adc9 100644 (file)
@@ -31,16 +31,21 @@ final class Vb5Argon2 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         return $this->argon2->verify(\md5($password), $hash);
     }
 
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         return $this->argon2->hash(\md5($password));
     }
 
index 61140fc97c14dce0c42b90440592b7051b230400..e8c32d312a7cd87f33f10f6b2884bde92ceddfe6 100644 (file)
@@ -31,16 +31,21 @@ final class Vb5Bcrypt implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         return $this->bcrypt->verify(\md5($password), $hash);
     }
 
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         return $this->bcrypt->hash(\md5($password));
     }
 
index 5fbff47a1228f7d4d55c2b4f8ff85f09a4bd8d9d..24b4ec6ed32f8e4d1fd6d8a0787b0c32c9c5aa42 100644 (file)
@@ -18,8 +18,11 @@ final class Wbb2 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         if (\hash_equals($hash, \md5($password))) {
             return true;
         } elseif (\hash_equals($hash, \sha1($password))) {
@@ -32,8 +35,10 @@ final class Wbb2 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         return \sha1($password);
     }
 
index c97c882324cd61411734d091b7cd40bdbe71850d..f840fcea81c03e5a752dcabc8d4fe993bbf520cb 100644 (file)
@@ -19,8 +19,11 @@ final class Wcf1 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         $parts = \explode(':', $hash, 2);
         $hash = $parts[0];
         $salt = $parts[1] ?? '';
@@ -31,8 +34,10 @@ final class Wcf1 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(20));
 
         return $this->hashWithSalt($password, $salt) . ':' . $salt;
@@ -41,8 +46,11 @@ final class Wcf1 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         return \sha1($salt . \sha1($salt . \sha1($password)));
     }
 
index 0fc9e4be0083bca42c6470a99a51704ef1ec6ca5..546b25d288ddfc9113464b4af466f4d0c13f39f6 100644 (file)
@@ -54,8 +54,11 @@ final class Wcf1e implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         $parts = \explode(':', $hash, 2);
         $hash = $parts[0];
         $salt = $parts[1] ?? '';
@@ -66,8 +69,10 @@ final class Wcf1e implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(20));
 
         return $this->hashWithSalt($password, $salt) . ':' . $salt;
@@ -76,8 +81,11 @@ final class Wcf1e implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         $hash = '';
         if ($this->enableSalting) {
             if ($this->saltPosition === 'b') {
@@ -105,8 +113,10 @@ final class Wcf1e implements IPasswordAlgorithm
     /**
      * Encrypts a given string with the used encryption method.
      */
-    private function encrypt(string $string): string
-    {
+    private function encrypt(
+        #[\SensitiveParameter]
+        string $string
+    ): string {
         switch ($this->encryptionMethod) {
             case 'c':
                 return \crc32($string);
index 9e9cc9c836a61bfd52b8396619cbabe1ca3fc112..148b65f0d8433ac32517063f7279b9b80e599386 100644 (file)
@@ -31,16 +31,21 @@ final class Wcf2 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         return $this->doubleBcrypt->verify($password, $hash);
     }
 
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         return $this->doubleBcrypt->hash($password);
     }
 
index b1c82cf0b7334f2a7849bc869cbedcb22e4c9784..084e47123e86f0286c6de7a5f4339e0e4f9629c7 100644 (file)
@@ -19,8 +19,11 @@ final class Xf1 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         $parts = \explode(':', $hash, 2);
         $hash = $parts[0];
         $salt = $parts[1] ?? '';
@@ -35,8 +38,10 @@ final class Xf1 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         $salt = Hex::encode(\random_bytes(20));
 
         return $this->hashWithSalt($password, $salt) . ':' . $salt;
@@ -45,8 +50,11 @@ final class Xf1 implements IPasswordAlgorithm
     /**
      * Returns the hashed password, hashed with a given salt.
      */
-    private function hashWithSalt(string $password, string $salt): string
-    {
+    private function hashWithSalt(
+        #[\SensitiveParameter]
+        string $password,
+        string $salt
+    ): string {
         return \hash('sha256', \hash('sha256', $password) . $salt);
     }
 
index 1d56bd482c9ac1b3f67ec535d114337bd0c40b70..6f4db359b1966d8a8323fcd3ae31c76fb180b9c7 100644 (file)
@@ -31,16 +31,21 @@ final class Xf12 implements IPasswordAlgorithm
     /**
      * @inheritDoc
      */
-    public function verify(string $password, string $hash): bool
-    {
+    public function verify(
+        #[\SensitiveParameter]
+        string $password,
+        string $hash
+    ): bool {
         return $this->bcrypt->verify($password, $hash);
     }
 
     /**
      * @inheritDoc
      */
-    public function hash(string $password): string
-    {
+    public function hash(
+        #[\SensitiveParameter]
+        string $password
+    ): string {
         return $this->bcrypt->hash($password);
     }
 
index 182f7bc5e7fe48d2440a569d95ec23ae6fac216b..1e4e7f7312ef84d74397ca14479124573de460e7 100644 (file)
@@ -40,8 +40,10 @@ final class Totp
      */
     private $secret;
 
-    public function __construct(string $secret)
-    {
+    public function __construct(
+        #[\SensitiveParameter]
+        string $secret
+    ) {
         $this->secret = $secret;
     }