From: =?utf-8?q?David_Pr=C3=A9vot?= <taffit@debian.org>
Date: Sun, 16 Feb 2025 12:39:55 +0100
Subject: Modernize PHPUnit syntax

---
 tests/Functional/Net/SCPSSH2UserStoryTest.php |   4 +
 tests/Functional/Net/SFTPUserStoryTest.php    | 150 ++++++++------------------
 tests/Functional/Net/SSH2AgentTest.php        |   5 +-
 tests/Functional/Net/SSH2Test.php             |  36 +++----
 tests/Unit/Crypt/AES/TestCase.php             |   4 +
 tests/Unit/Crypt/BlowfishTest.php             |   2 +
 tests/Unit/Crypt/Hash/MD5Test.php             |   3 +
 tests/Unit/Crypt/Hash/SHA256Test.php          |   3 +
 tests/Unit/Crypt/Hash/SHA256_96Test.php       |   3 +
 tests/Unit/Crypt/Hash/SHA512Test.php          |   3 +
 tests/Unit/Crypt/Hash/SHA512_96Test.php       |   3 +
 tests/Unit/Crypt/RC2Test.php                  |   5 +-
 tests/Unit/Crypt/RC4Test.php                  |   2 +
 tests/Unit/Crypt/RandomTest.php               |   3 +-
 tests/Unit/Crypt/TripleDESTest.php            |   7 +-
 tests/Unit/Net/SSH1Test.php                   |   3 +
 tests/Unit/Net/SSH2UnitTest.php               |  17 ++-
 17 files changed, 106 insertions(+), 147 deletions(-)

diff --git a/tests/Functional/Net/SCPSSH2UserStoryTest.php b/tests/Functional/Net/SCPSSH2UserStoryTest.php
index 2456158..d7ab2af 100644
--- a/tests/Functional/Net/SCPSSH2UserStoryTest.php
+++ b/tests/Functional/Net/SCPSSH2UserStoryTest.php
@@ -8,6 +8,7 @@
 
 use phpseclib\Net\SCP;
 use phpseclib\Net\SSH2;
+use PHPUnit\Framework\Attributes\Depends;
 
 class Functional_Net_SCPSSH2UserStoryTest extends PhpseclibFunctionalTestCase
 {
@@ -39,6 +40,7 @@ class Functional_Net_SCPSSH2UserStoryTest extends PhpseclibFunctionalTestCase
      * @depends testConstructSSH2
      * @param \phpseclib\Net\SSH2 $ssh
      */
+    #[Depends('testConstructSSH2')]
     public function testConstructor($ssh)
     {
         $scp = new SCP($ssh);
@@ -53,6 +55,7 @@ class Functional_Net_SCPSSH2UserStoryTest extends PhpseclibFunctionalTestCase
      * @depends testConstructor
      * @param \phpseclib\Net\SCP $scp
      */
+    #[Depends('testConstructor')]
     public function testPutGetString($scp)
     {
         $this->assertTrue(
@@ -78,6 +81,7 @@ class Functional_Net_SCPSSH2UserStoryTest extends PhpseclibFunctionalTestCase
      * @depends testPutGetString
      * @param \phpseclib\Net\SCP $scp
      */
+    #[Depends('testPutGetString')]
     public function testGetFile($scp)
     {
         $localFilename = $this->createTempFile();
diff --git a/tests/Functional/Net/SFTPUserStoryTest.php b/tests/Functional/Net/SFTPUserStoryTest.php
index 09a52fc..cb5c24e 100644
--- a/tests/Functional/Net/SFTPUserStoryTest.php
+++ b/tests/Functional/Net/SFTPUserStoryTest.php
@@ -7,6 +7,8 @@
  */
 
 use phpseclib\Net\SFTP;
+use PHPUnit\Framework\Attributes\Depends;
+use PHPUnit\Framework\Attributes\Group;
 
 class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
 {
@@ -46,9 +48,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testConstructor
-     */
+    #[Depends('testConstructor')]
     public function testPasswordLogin($sftp)
     {
         $username = $this->getEnv('SSH_USERNAME');
@@ -61,9 +61,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testPasswordLogin
-     */
+    #[Depends('testPasswordLogin')]
     public function testPwdHome($sftp)
     {
         $this->assertEquals(
@@ -75,9 +73,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testPwdHome
-     */
+    #[Depends('testPwdHome')]
     public function testMkDirScratch($sftp)
     {
         $dirname = self::$scratchDir;
@@ -97,9 +93,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testMkDirScratch
-     */
+    #[Depends('testMkDirScratch')]
     public function testChDirScratch($sftp)
     {
         $this->assertTrue(
@@ -130,9 +124,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testChDirScratch
-     */
+    #[Depends('testChDirScratch')]
     public function testStatOnDir($sftp)
     {
         $this->assertNotSame(
@@ -157,6 +149,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
     /**
      * @depends testStatOnDir
      */
+    #[Depends('testStatOnDir')]
     public function testPutSizeGetFile($sftp)
     {
         $this->assertTrue(
@@ -182,6 +175,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
     /**
      * @depends testStatOnDir
      */
+    #[Depends('testStatOnDir')]
     public function testPutSizeGetFileCallback($sftp)
     {
         self::$buffer = self::$exampleData;
@@ -205,9 +199,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testPutSizeGetFile
-     */
+    #[Depends('testPutSizeGetFile')]
     public function testTouch($sftp)
     {
         $this->assertTrue(
@@ -223,9 +215,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testTouch
-     */
+    #[Depends('testTouch')]
     public function testTruncate($sftp)
     {
         $this->assertTrue(
@@ -247,10 +237,8 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testTruncate
-     * @group github850
-     */
+    #[Depends('testTruncate')]
+    #[Group('github850')]
     public function testChModOnFile($sftp)
     {
         $this->assertNotFalse(
@@ -261,9 +249,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testChModOnFile
-     */
+    #[Depends('testChModOnFile')]
     public function testChDirOnFile($sftp)
     {
         $this->assertFalse(
@@ -274,9 +260,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testChDirOnFile
-     */
+    #[Depends('testChDirOnFile')]
     public function testFileExistsIsFileIsDirFile($sftp)
     {
         $this->assertTrue(
@@ -297,9 +281,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testFileExistsIsFileIsDirFile
-     */
+    #[Depends('testFileExistsIsFileIsDirFile')]
     public function testFileExistsIsFileIsDirFileNonexistent($sftp)
     {
         $this->assertFalse(
@@ -320,9 +302,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testFileExistsIsFileIsDirFileNonexistent
-     */
+    #[Depends('testFileExistsIsFileIsDirFileNonexistent')]
     public function testSortOrder($sftp)
     {
         $this->assertTrue(
@@ -373,9 +353,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testSortOrder
-     */
+    #[Depends('testSortOrder')]
     public function testResourceXfer($sftp)
     {
         $fp = fopen('res.txt', 'w+');
@@ -393,9 +371,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testResourceXfer
-     */
+    #[Depends('testResourceXfer')]
     public function testSymlink($sftp)
     {
         $this->assertTrue(
@@ -406,9 +382,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testSymlink
-     */
+    #[Depends('testSymlink')]
     public function testStatLstatCache($sftp)
     {
         $stat = $sftp->stat('symlink');
@@ -422,9 +396,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testStatLstatCache
-     */
+    #[Depends('testStatLstatCache')]
     public function testLinkFile($sftp)
     {
         $this->assertTrue(
@@ -443,9 +415,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testLinkFile
-     */
+    #[Depends('testLinkFile')]
     public function testReadlink($sftp)
     {
         $this->assertIsString(
@@ -456,10 +426,8 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testReadlink
-     * @group github716
-     */
+    #[Depends('testReadlink')]
+    #[Group('github716')]
     public function testStatOnCWD($sftp)
     {
         $stat = $sftp->stat('.');
@@ -478,9 +446,9 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
 
     /**
      * on older versions this would result in a fatal error
-     * @depends testStatOnCWD
-     * @group github402
      */
+    #[Depends('testStatOnCWD')]
+    #[Group('github402')]
     public function testStatcacheFix($sftp)
     {
         // Name used for both directory and file.
@@ -501,9 +469,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testStatcacheFix
-     */
+    #[Depends('testStatcacheFix')]
     public function testChDirUpHome($sftp)
     {
         $this->assertTrue(
@@ -520,9 +486,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testChDirUpHome
-     */
+    #[Depends('testChDirUpHome')]
     public function testFileExistsIsFileIsDirDir($sftp)
     {
         $this->assertTrue(
@@ -543,9 +507,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testFileExistsIsFileIsDirDir
-     */
+    #[Depends('testFileExistsIsFileIsDirDir')]
     public function testTruncateLargeFile($sftp)
     {
         $filesize = (4 * 1024 + 16) * 1024 * 1024;
@@ -557,9 +519,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testTruncateLargeFile
-     */
+    #[Depends('testTruncateLargeFile')]
     public function testRmDirScratch($sftp)
     {
         $this->assertFalse(
@@ -571,9 +531,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testRmDirScratch
-     */
+    #[Depends('testRmDirScratch')]
     public function testDeleteRecursiveScratch($sftp)
     {
         $this->assertTrue(
@@ -585,9 +543,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testDeleteRecursiveScratch
-     */
+    #[Depends('testDeleteRecursiveScratch')]
     public function testRmDirScratchNonexistent($sftp)
     {
         $this->assertFalse(
@@ -599,10 +555,8 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testRmDirScratchNonexistent
-     * @group github706
-     */
+    #[Depends('testRmDirScratchNonexistent')]
+    #[Group('github706')]
     public function testDeleteEmptyDir($sftp)
     {
         $this->assertTrue(
@@ -633,10 +587,8 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testDeleteEmptyDir
-     * @group github735
-     */
+    #[Depends('testDeleteEmptyDir')]
+    #[Group('github735')]
     public function testStatVsLstat($sftp)
     {
         $this->assertTrue($sftp->mkdir(self::$scratchDir));
@@ -680,10 +632,8 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testStatVsLstat
-     * @group github830
-     */
+    #[Depends('testStatVsLstat')]
+    #[Group('github830')]
     public function testUploadOffsets($sftp)
     {
         $sftp->put('offset.txt', 'res.txt', SFTP::SOURCE_LOCAL_FILE, 0, 10);
@@ -703,9 +653,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testUploadOffsets
-     */
+    #[Depends('testUploadOffsets')]
     public function testReadableWritable($sftp)
     {
         $sftp->chmod(0000, 'offset.txt');
@@ -725,10 +673,8 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testReadableWritable
-     * @group github999
-     */
+    #[Depends('testReadableWritable')]
+    #[Group('github999')]
     public function testExecNlist($sftp)
     {
         $sftp->enablePTY();
@@ -741,9 +687,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testExecNlist
-     */
+    #[Depends('testExecNlist')]
     public function testRawlistDisabledStatCache($sftp)
     {
         $this->assertTrue($sftp->mkdir(self::$scratchDir));
@@ -767,9 +711,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testRawlistDisabledStatCache
-     */
+    #[Depends('testRawlistDisabledStatCache')]
     public function testChownChgrp($sftp)
     {
         $stat = $sftp->stat(self::$scratchDir);
@@ -784,10 +726,8 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testChownChgrp
-     * @group github1934
-     */
+    #[Depends('testChownChgrp')]
+    #[Group('github1934')]
     public function testCallableGetWithLength($sftp)
     {
         $sftp->put('test.txt', 'zzzzz');
diff --git a/tests/Functional/Net/SSH2AgentTest.php b/tests/Functional/Net/SSH2AgentTest.php
index 67c1859..945dc67 100644
--- a/tests/Functional/Net/SSH2AgentTest.php
+++ b/tests/Functional/Net/SSH2AgentTest.php
@@ -8,6 +8,7 @@
 
 use phpseclib\Net\SSH2;
 use phpseclib\System\SSH\Agent;
+use PHPUnit\Framework\Attributes\Depends;
 
 class Functional_Net_SSH2AgentTest extends PhpseclibFunctionalTestCase
 {
@@ -34,9 +35,7 @@ class Functional_Net_SSH2AgentTest extends PhpseclibFunctionalTestCase
         return array('ssh' => $ssh, 'ssh-agent' => $agent);
     }
 
-    /**
-     * @depends testAgentLogin
-     */
+    #[Depends('testAgentLogin')]
     public function testAgentForward($args)
     {
         $ssh = $args['ssh'];
diff --git a/tests/Functional/Net/SSH2Test.php b/tests/Functional/Net/SSH2Test.php
index 4ff9eb8..a478954 100644
--- a/tests/Functional/Net/SSH2Test.php
+++ b/tests/Functional/Net/SSH2Test.php
@@ -7,6 +7,8 @@
  */
 
 use phpseclib\Net\SSH2;
+use PHPUnit\Framework\Attributes\Depends;
+use PHPUnit\Framework\Attributes\Group;
 
 class Functional_Net_SSH2Test extends PhpseclibFunctionalTestCase
 {
@@ -22,11 +24,9 @@ class Functional_Net_SSH2Test extends PhpseclibFunctionalTestCase
         return $ssh;
     }
 
-    /**
-     * @depends testConstructor
-     * @group github408
-     * @group github412
-     */
+    #[Depends('testConstructor')]
+    #[Group('github408')]
+    #[Group('github412')]
     public function testPreLogin($ssh)
     {
         $this->assertFalse(
@@ -57,9 +57,7 @@ class Functional_Net_SSH2Test extends PhpseclibFunctionalTestCase
         return $ssh;
     }
 
-    /**
-     * @depends testPreLogin
-     */
+    #[Depends('testPreLogin')]
     public function testBadPassword($ssh)
     {
         $username = $this->getEnv('SSH_USERNAME');
@@ -82,9 +80,7 @@ class Functional_Net_SSH2Test extends PhpseclibFunctionalTestCase
         return $ssh;
     }
 
-    /**
-     * @depends testBadPassword
-     */
+    #[Depends('testBadPassword')]
     public function testPasswordLogin($ssh)
     {
         $username = $this->getEnv('SSH_USERNAME');
@@ -102,10 +98,8 @@ class Functional_Net_SSH2Test extends PhpseclibFunctionalTestCase
         return $ssh;
     }
 
-    /**
-     * @depends testPasswordLogin
-     * @group github280
-     */
+    #[Depends('testPasswordLogin')]
+    #[Group('github280')]
     public function testExecWithMethodCallback($ssh)
     {
         $callbackObject = $this->getMockBuilder('stdClass')
@@ -140,10 +134,8 @@ class Functional_Net_SSH2Test extends PhpseclibFunctionalTestCase
         );
     }
 
-    /**
-     * @depends testExecWithMethodCallback
-     * @group github1009
-     */
+    #[Depends('testExecWithMethodCallback')]
+    #[Group('github1009')]
     public function testDisablePTY($ssh)
     {
         $ssh->enablePTY();
@@ -156,10 +148,8 @@ class Functional_Net_SSH2Test extends PhpseclibFunctionalTestCase
         return $ssh;
     }
 
-    /**
-     * @depends testDisablePTY
-     * @group github1167
-     */
+    #[Depends('testDisablePTY')]
+    #[Group('github1167')]
     public function testChannelDataAfterOpen($ssh)
     {
         // Ubuntu's OpenSSH from 5.8 to 6.9 didn't work with multiple channels. see
diff --git a/tests/Unit/Crypt/AES/TestCase.php b/tests/Unit/Crypt/AES/TestCase.php
index a56a60e..21e70b3 100644
--- a/tests/Unit/Crypt/AES/TestCase.php
+++ b/tests/Unit/Crypt/AES/TestCase.php
@@ -8,6 +8,7 @@
 use phpseclib\Crypt\AES;
 use phpseclib\Crypt\Base;
 use phpseclib\Crypt\Rijndael;
+use PHPUnit\Framework\Attributes\DataProvider;
 
 abstract class Unit_Crypt_AES_TestCase extends PhpseclibTestCase
 {
@@ -76,6 +77,7 @@ abstract class Unit_Crypt_AES_TestCase extends PhpseclibTestCase
     /**
      * @dataProvider continuousBufferCombos
      */
+    #[DataProvider('continuousBufferCombos')]
     public function testEncryptDecryptWithContinuousBuffer($mode, $plaintext, $iv, $key)
     {
         $aes = new AES($mode);
@@ -175,6 +177,7 @@ abstract class Unit_Crypt_AES_TestCase extends PhpseclibTestCase
     /**
      * @dataProvider continuousBufferBatteryCombos
      */
+    #[DataProvider('continuousBufferBatteryCombos')]
     public function testContinuousBufferBattery($op, $mode, $test)
     {
         $iv = str_repeat('x', 16);
@@ -222,6 +225,7 @@ abstract class Unit_Crypt_AES_TestCase extends PhpseclibTestCase
      *
      * @dataProvider continuousBufferBatteryCombos
      */
+    #[DataProvider('continuousBufferBatteryCombos')]
     public function testNonContinuousBufferBattery($op, $mode, $test)
     {
         if (count($test) == 1) {
diff --git a/tests/Unit/Crypt/BlowfishTest.php b/tests/Unit/Crypt/BlowfishTest.php
index 73e14cb..5413d92 100644
--- a/tests/Unit/Crypt/BlowfishTest.php
+++ b/tests/Unit/Crypt/BlowfishTest.php
@@ -8,6 +8,7 @@
 use phpseclib\Crypt\Base;
 use phpseclib\Crypt\Blowfish;
 use phpseclib\Crypt\Random;
+use PHPUnit\Framework\Attributes\DataProvider;
 
 class Unit_Crypt_BlowfishTest extends PhpseclibTestCase
 {
@@ -72,6 +73,7 @@ class Unit_Crypt_BlowfishTest extends PhpseclibTestCase
     /**
      * @dataProvider engineVectors
      */
+    #[DataProvider('engineVectors')]
     public function testVectors($engine, $engineName, $key, $plaintext, $expected)
     {
         if (PHP_INT_SIZE == 4) {
diff --git a/tests/Unit/Crypt/Hash/MD5Test.php b/tests/Unit/Crypt/Hash/MD5Test.php
index 431184e..b116307 100644
--- a/tests/Unit/Crypt/Hash/MD5Test.php
+++ b/tests/Unit/Crypt/Hash/MD5Test.php
@@ -6,6 +6,7 @@
  */
 
 use phpseclib\Crypt\Hash;
+use PHPUnit\Framework\Attributes\DataProvider;
 
 class Unit_Crypt_Hash_MD5Test extends Unit_Crypt_Hash_TestCase
 {
@@ -17,6 +18,7 @@ class Unit_Crypt_Hash_MD5Test extends Unit_Crypt_Hash_TestCase
     /**
      * @dataProvider hashData()
      */
+    #[DataProvider('hashData')]
     public function testHash($message, $result)
     {
         $this->assertHashesTo($this->getInstance(), $message, $result);
@@ -34,6 +36,7 @@ class Unit_Crypt_Hash_MD5Test extends Unit_Crypt_Hash_TestCase
     /**
      * @dataProvider hmacData()
      */
+    #[DataProvider('hmacData')]
     public function testHMAC($key, $message, $result)
     {
         $this->assertHMACsTo($this->getInstance(), $key, $message, $result);
diff --git a/tests/Unit/Crypt/Hash/SHA256Test.php b/tests/Unit/Crypt/Hash/SHA256Test.php
index bad46b3..7490be8 100644
--- a/tests/Unit/Crypt/Hash/SHA256Test.php
+++ b/tests/Unit/Crypt/Hash/SHA256Test.php
@@ -6,6 +6,7 @@
  */
 
 use phpseclib\Crypt\Hash;
+use PHPUnit\Framework\Attributes\DataProvider;
 
 class Unit_Crypt_Hash_SHA256Test extends Unit_Crypt_Hash_TestCase
 {
@@ -17,6 +18,7 @@ class Unit_Crypt_Hash_SHA256Test extends Unit_Crypt_Hash_TestCase
     /**
      * @dataProvider hashData()
      */
+    #[DataProvider('hashData')]
     public function testHash($message, $result)
     {
         $this->assertHashesTo($this->getInstance(), $message, $result);
@@ -43,6 +45,7 @@ class Unit_Crypt_Hash_SHA256Test extends Unit_Crypt_Hash_TestCase
     /**
      * @dataProvider hmacData()
      */
+    #[DataProvider('hmacData')]
     public function testHMAC($key, $message, $result)
     {
         $this->assertHMACsTo($this->getInstance(), $key, $message, $result);
diff --git a/tests/Unit/Crypt/Hash/SHA256_96Test.php b/tests/Unit/Crypt/Hash/SHA256_96Test.php
index 85aaf29..6585f64 100644
--- a/tests/Unit/Crypt/Hash/SHA256_96Test.php
+++ b/tests/Unit/Crypt/Hash/SHA256_96Test.php
@@ -6,6 +6,7 @@
  */
 
 use phpseclib\Crypt\Hash;
+use PHPUnit\Framework\Attributes\DataProvider;
 
 class Unit_Crypt_Hash_SHA256_96Test extends Unit_Crypt_Hash_SHA256Test
 {
@@ -17,6 +18,7 @@ class Unit_Crypt_Hash_SHA256_96Test extends Unit_Crypt_Hash_SHA256Test
     /**
      * @dataProvider hashData()
      */
+    #[DataProvider('hashData')]
     public function testHash($message, $longResult)
     {
         parent::testHash($message, substr($longResult, 0, 24));
@@ -25,6 +27,7 @@ class Unit_Crypt_Hash_SHA256_96Test extends Unit_Crypt_Hash_SHA256Test
     /**
      * @dataProvider hmacData()
      */
+    #[DataProvider('hmacData')]
     public function testHMAC($key, $message, $longResult)
     {
         parent::testHMAC($key, $message, substr($longResult, 0, 24));
diff --git a/tests/Unit/Crypt/Hash/SHA512Test.php b/tests/Unit/Crypt/Hash/SHA512Test.php
index ad2e63e..737df2a 100644
--- a/tests/Unit/Crypt/Hash/SHA512Test.php
+++ b/tests/Unit/Crypt/Hash/SHA512Test.php
@@ -6,6 +6,7 @@
  */
 
 use phpseclib\Crypt\Hash;
+use PHPUnit\Framework\Attributes\DataProvider;
 
 class Unit_Crypt_Hash_SHA512Test extends Unit_Crypt_Hash_TestCase
 {
@@ -17,6 +18,7 @@ class Unit_Crypt_Hash_SHA512Test extends Unit_Crypt_Hash_TestCase
     /**
      * @dataProvider hashData()
      */
+    #[DataProvider('hashData')]
     public function testHash($message, $result)
     {
         $this->assertHashesTo($this->getInstance(), $message, $result);
@@ -43,6 +45,7 @@ class Unit_Crypt_Hash_SHA512Test extends Unit_Crypt_Hash_TestCase
     /**
      * @dataProvider hmacData()
      */
+    #[DataProvider('hmacData')]
     public function testHMAC($key, $message, $result)
     {
         $this->assertHMACsTo($this->getInstance(), $key, $message, $result);
diff --git a/tests/Unit/Crypt/Hash/SHA512_96Test.php b/tests/Unit/Crypt/Hash/SHA512_96Test.php
index 760fa24..3bdd711 100644
--- a/tests/Unit/Crypt/Hash/SHA512_96Test.php
+++ b/tests/Unit/Crypt/Hash/SHA512_96Test.php
@@ -6,6 +6,7 @@
  */
 
 use phpseclib\Crypt\Hash;
+use PHPUnit\Framework\Attributes\DataProvider;
 
 class Unit_Crypt_Hash_SHA512_96Test extends Unit_Crypt_Hash_SHA512Test
 {
@@ -17,6 +18,7 @@ class Unit_Crypt_Hash_SHA512_96Test extends Unit_Crypt_Hash_SHA512Test
     /**
      * @dataProvider hashData()
      */
+    #[DataProvider('hashData')]
     public function testHash($message, $longResult)
     {
         parent::testHash($message, substr($longResult, 0, 24));
@@ -25,6 +27,7 @@ class Unit_Crypt_Hash_SHA512_96Test extends Unit_Crypt_Hash_SHA512Test
     /**
      * @dataProvider hmacData()
      */
+    #[DataProvider('hmacData')]
     public function testHMAC($key, $message, $longResult)
     {
         parent::testHMAC($key, $message, substr($longResult, 0, 24));
diff --git a/tests/Unit/Crypt/RC2Test.php b/tests/Unit/Crypt/RC2Test.php
index ded7a00..79678b7 100644
--- a/tests/Unit/Crypt/RC2Test.php
+++ b/tests/Unit/Crypt/RC2Test.php
@@ -7,6 +7,7 @@
 
 use phpseclib\Crypt\Base;
 use phpseclib\Crypt\RC2;
+use PHPUnit\Framework\Attributes\Group;
 
 class Unit_Crypt_RC2Test extends PhpseclibTestCase
 {
@@ -105,9 +106,7 @@ class Unit_Crypt_RC2Test extends PhpseclibTestCase
         }
     }
 
-    /**
-     * @group nophpunit11
-     */
+    #[Group('nophpunit11')]
     public function testVectors($engine, $engineName, $key, $keyLen, $plaintext, $ciphertext)
     {
         $rc2 = new RC2();
diff --git a/tests/Unit/Crypt/RC4Test.php b/tests/Unit/Crypt/RC4Test.php
index b4ad228..6e8d97f 100644
--- a/tests/Unit/Crypt/RC4Test.php
+++ b/tests/Unit/Crypt/RC4Test.php
@@ -8,6 +8,7 @@
 use phpseclib\Crypt\Base;
 use phpseclib\Crypt\RC4;
 use phpseclib\Crypt\Random;
+use PHPUnit\Framework\Attributes\DataProvider;
 
 class Unit_Crypt_RC4Test extends PhpseclibTestCase
 {
@@ -199,6 +200,7 @@ class Unit_Crypt_RC4Test extends PhpseclibTestCase
     /**
      * @dataProvider engineVectors
      */
+    #[DataProvider('engineVectors')]
     public function testVectors($engine, $engineName, $key, $offset, $expected)
     {
         $rc4 = new RC4();
diff --git a/tests/Unit/Crypt/RandomTest.php b/tests/Unit/Crypt/RandomTest.php
index 8896ec5..6ca7d29 100644
--- a/tests/Unit/Crypt/RandomTest.php
+++ b/tests/Unit/Crypt/RandomTest.php
@@ -6,6 +6,7 @@
  */
 
 use phpseclib\Crypt\Random;
+use PHPUnit\Framework\Attributes\Group;
 
 class Unit_Crypt_RandomTest extends PhpseclibTestCase
 {
@@ -18,7 +19,7 @@ class Unit_Crypt_RandomTest extends PhpseclibTestCase
         ));
     }
 
-    /** @group nophpunit11 */
+    #[Group('nophpunit11')]
     public function testStringLength($length)
     {
         $this->assertSame(
diff --git a/tests/Unit/Crypt/TripleDESTest.php b/tests/Unit/Crypt/TripleDESTest.php
index 7ebe58a..6d8e6bc 100644
--- a/tests/Unit/Crypt/TripleDESTest.php
+++ b/tests/Unit/Crypt/TripleDESTest.php
@@ -7,6 +7,8 @@
 
 use phpseclib\Crypt\Base;
 use phpseclib\Crypt\TripleDES;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\Group;
 
 class Unit_Crypt_TripleDESTest extends PhpseclibTestCase
 {
@@ -99,9 +101,7 @@ class Unit_Crypt_TripleDESTest extends PhpseclibTestCase
         return $result;
     }
 
-    /**
-     * @group nophpunit11
-     */
+    #[Group('nophpunit11')]
     public function testVectors($engine, $engineName, $key, $plaintext, $expected)
     {
         $des = new TripleDES();
@@ -153,6 +153,7 @@ class Unit_Crypt_TripleDESTest extends PhpseclibTestCase
     /**
      * @dataProvider engineIVVectors
      */
+    #[DataProvider('engineIVVectors')]
     public function testVectorsWithIV($engine, $engineName, $key, $iv, $plaintext, $expected)
     {
         $des = new TripleDES();
diff --git a/tests/Unit/Net/SSH1Test.php b/tests/Unit/Net/SSH1Test.php
index 662200a..793deb9 100644
--- a/tests/Unit/Net/SSH1Test.php
+++ b/tests/Unit/Net/SSH1Test.php
@@ -5,6 +5,8 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
+
 class Unit_Net_SSH1Test extends PhpseclibTestCase
 {
     public static function formatLogDataProvider()
@@ -27,6 +29,7 @@ class Unit_Net_SSH1Test extends PhpseclibTestCase
     /**
      * @dataProvider formatLogDataProvider
      */
+    #[DataProvider('formatLogDataProvider')]
     public function testFormatLog(array $message_log, array $message_number_log, $expected)
     {
         $ssh = $this->getMockBuilder('phpseclib\Net\SSH1')
diff --git a/tests/Unit/Net/SSH2UnitTest.php b/tests/Unit/Net/SSH2UnitTest.php
index a85a9f5..c40ffc9 100644
--- a/tests/Unit/Net/SSH2UnitTest.php
+++ b/tests/Unit/Net/SSH2UnitTest.php
@@ -7,6 +7,7 @@
  */
 
 use phpseclib\Net\SSH2;
+use PHPUnit\Framework\Attributes\Group;
 
 class Unit_Net_SSH2UnitTest extends PhpseclibTestCase
 {
@@ -27,9 +28,7 @@ class Unit_Net_SSH2UnitTest extends PhpseclibTestCase
         );
     }
 
-    /**
-     * @group nophpunit11
-     */
+    #[Group('nophpunit11')]
     public function testFormatLog(array $message_log, array $message_number_log, $expected)
     {
         $ssh = $this->createSSHMock();
@@ -38,7 +37,7 @@ class Unit_Net_SSH2UnitTest extends PhpseclibTestCase
         $this->assertEquals($expected, $result);
     }
 
-    /** @group nophpunit11 */
+    #[Group('nophpunit11')]
     public function testGenerateIdentifier()
     {
         $identifier = $this->createSSHMock()->_generate_identifier();
@@ -71,7 +70,7 @@ class Unit_Net_SSH2UnitTest extends PhpseclibTestCase
         }
     }
 
-    /** @group nophpunit11 */
+    #[Group('nophpunit11')]
     public function testGetExitStatusIfNotConnected()
     {
         $ssh = $this->createSSHMock();
@@ -79,14 +78,14 @@ class Unit_Net_SSH2UnitTest extends PhpseclibTestCase
         $this->assertFalse($ssh->getExitStatus());
     }
 
-    /** @group nophpunit11 */
+    #[Group('nophpunit11')]
     public function testPTYIDefaultValue()
     {
         $ssh = $this->createSSHMock();
         $this->assertFalse($ssh->isPTYEnabled());
     }
 
-    /** @group nophpunit11 */
+    #[Group('nophpunit11')]
     public function testEnablePTY()
     {
         $ssh = $this->createSSHMock();
@@ -98,7 +97,7 @@ class Unit_Net_SSH2UnitTest extends PhpseclibTestCase
         $this->assertFalse($ssh->isPTYEnabled());
     }
 
-    /** @group nophpunit11 */
+    #[Group('nophpunit11')]
     public function testQuietModeDefaultValue()
     {
         $ssh = $this->createSSHMock();
@@ -106,7 +105,7 @@ class Unit_Net_SSH2UnitTest extends PhpseclibTestCase
         $this->assertFalse($ssh->isQuietModeEnabled());
     }
 
-    /** @group nophpunit11 */
+    #[Group('nophpunit11')]
     public function testEnableQuietMode()
     {
         $ssh = $this->createSSHMock();
