radarrplexorganizrnginxsonarrdashboardserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpc
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							188 lines
						
					
					
						
							5.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							188 lines
						
					
					
						
							5.6 KiB
						
					
					
				| <?php | |
| namespace Lcobucci\JWT\Signer; | |
| 
 | |
| use InvalidArgumentException; | |
| use Lcobucci\JWT\Keys; | |
| use PHPUnit\Framework\TestCase; | |
| use const OPENSSL_ALGO_SHA256; | |
| use function openssl_pkey_get_private; | |
| use function openssl_pkey_get_public; | |
| use function openssl_sign; | |
| use function openssl_verify; | |
| 
 | |
| final class RsaTest extends TestCase | |
| { | |
|     use Keys; | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::createHash | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::validateKey | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::getKeyType | |
|      * @covers \Lcobucci\JWT\Signer\OpenSSL | |
|      * @covers \Lcobucci\JWT\Signer\BaseSigner | |
|      * | |
|      * @uses \Lcobucci\JWT\Signer\Key | |
|      * @uses \Lcobucci\JWT\Signature | |
|      */ | |
|     public function createHashShouldReturnAValidOpensslSignature() | |
|     { | |
|         $payload = 'testing'; | |
| 
 | |
|         $signer    = $this->getSigner(); | |
|         $signature = $signer->sign($payload, self::$rsaKeys['private']); | |
| 
 | |
|         $publicKey = openssl_pkey_get_public(self::$rsaKeys['public']->getContent()); | |
|         self::assertInternalType('resource', $publicKey); | |
|         self::assertSame(1, openssl_verify($payload, $signature, $publicKey, OPENSSL_ALGO_SHA256)); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::createHash | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::validateKey | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::getKeyType | |
|      * @covers \Lcobucci\JWT\Signer\OpenSSL | |
|      * @covers \Lcobucci\JWT\Signer\BaseSigner | |
|      * | |
|      * @uses \Lcobucci\JWT\Signer\Key | |
|      */ | |
|     public function createHashShouldRaiseAnExceptionWhenKeyIsInvalid() | |
|     { | |
|         $key = <<<KEY | |
| -----BEGIN RSA PRIVATE KEY----- | |
| MGECAQACEQC4MRKSVsq5XnRBrJoX6+rnAgMBAAECECO8SZkgw6Yg66A6SUly/3kC | |
| CQDtPXZtCQWJuwIJAMbBu17GDOrFAggopfhNlFcjkwIIVjb7G+U0/TECCEERyvxP | |
| TWdN | |
| -----END RSA PRIVATE KEY----- | |
| KEY; | |
| 
 | |
|         $signer = $this->getSigner(); | |
| 
 | |
|         $this->expectException(InvalidArgumentException::class); | |
|         $this->expectExceptionMessage('There was an error while creating the signature'); | |
| 
 | |
|         $signer->sign('testing', new Key($key)); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::createHash | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::validateKey | |
|      * @covers \Lcobucci\JWT\Signer\OpenSSL | |
|      * @covers \Lcobucci\JWT\Signer\BaseSigner | |
|      * | |
|      * @uses \Lcobucci\JWT\Signer\Key | |
|      */ | |
|     public function createHashShouldRaiseAnExceptionWhenKeyIsNotParseable() | |
|     { | |
|         $signer = $this->getSigner(); | |
| 
 | |
|         $this->expectException(InvalidArgumentException::class); | |
|         $this->expectExceptionMessage('It was not possible to parse your key'); | |
| 
 | |
|         $signer->sign('testing', new Key('blablabla')); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::createHash | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::validateKey | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::getKeyType | |
|      * @covers \Lcobucci\JWT\Signer\OpenSSL | |
|      * @covers \Lcobucci\JWT\Signer\BaseSigner | |
|      * | |
|      * @uses \Lcobucci\JWT\Signer\Key | |
|      */ | |
|     public function createHashShouldRaiseAnExceptionWhenKeyTypeIsNotRsa() | |
|     { | |
|         $signer = $this->getSigner(); | |
| 
 | |
|         $this->expectException(InvalidArgumentException::class); | |
|         $this->expectExceptionMessage('This key is not compatible with this signer'); | |
| 
 | |
|         $signer->sign('testing', self::$ecdsaKeys['private']); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::doVerify | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::validateKey | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::getKeyType | |
|      * @covers \Lcobucci\JWT\Signer\OpenSSL | |
|      * @covers \Lcobucci\JWT\Signer\BaseSigner | |
|      * | |
|      * @uses \Lcobucci\JWT\Signer\Key | |
|      */ | |
|     public function doVerifyShouldReturnTrueWhenSignatureIsValid() | |
|     { | |
|         $payload    = 'testing'; | |
|         $privateKey = openssl_pkey_get_private(self::$rsaKeys['private']->getContent()); | |
|         self::assertInternalType('resource', $privateKey); | |
| 
 | |
|         $signature = ''; | |
|         openssl_sign($payload, $signature, $privateKey, OPENSSL_ALGO_SHA256); | |
| 
 | |
|         $signer = $this->getSigner(); | |
| 
 | |
|         self::assertTrue($signer->verify($signature, $payload, self::$rsaKeys['public'])); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::doVerify | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::validateKey | |
|      * @covers \Lcobucci\JWT\Signer\OpenSSL | |
|      * @covers \Lcobucci\JWT\Signer\BaseSigner | |
|      * | |
|      * @uses \Lcobucci\JWT\Signer\Key | |
|      */ | |
|     public function doVerifyShouldRaiseAnExceptionWhenKeyIsNotParseable() | |
|     { | |
|         $signer = $this->getSigner(); | |
| 
 | |
|         $this->expectException(InvalidArgumentException::class); | |
|         $this->expectExceptionMessage('It was not possible to parse your key'); | |
| 
 | |
|         $signer->verify('testing', 'testing', new Key('blablabla')); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::doVerify | |
|      * @covers \Lcobucci\JWT\Signer\Rsa::validateKey | |
|      * @covers \Lcobucci\JWT\Signer\OpenSSL | |
|      * @covers \Lcobucci\JWT\Signer\BaseSigner | |
|      * | |
|      * @uses \Lcobucci\JWT\Signer\Key | |
|      */ | |
|     public function doVerifyShouldRaiseAnExceptionWhenKeyTypeIsNotRsa() | |
|     { | |
|         $signer = $this->getSigner(); | |
| 
 | |
|         $this->expectException(InvalidArgumentException::class); | |
|         $this->expectExceptionMessage('It was not possible to parse your key'); | |
| 
 | |
|         $signer->verify('testing', 'testing', self::$ecdsaKeys['private']); | |
|     } | |
| 
 | |
|     private function getSigner() | |
|     { | |
|         $signer = $this->getMockForAbstractClass(Rsa::class); | |
| 
 | |
|         $signer->method('getAlgorithm') | |
|                ->willReturn(OPENSSL_ALGO_SHA256); | |
| 
 | |
|         $signer->method('getAlgorithmId') | |
|                ->willReturn('RS256'); | |
| 
 | |
|         return $signer; | |
|     } | |
| }
 | |
| 
 |