<?php 
declare(strict_types=1); 
namespace ParagonIE\Paserk\Tests\Operations; 
 
use ParagonIE\Paserk\Operations\Key\SealingPublicKey; 
use ParagonIE\Paserk\Operations\Key\SealingSecretKey; 
use ParagonIE\Paserk\Operations\PKE; 
use ParagonIE\Paseto\Keys\SymmetricKey; 
use ParagonIE\Paseto\Protocol\{ 
    Version3, 
    Version4 
}; 
use ParagonIE\Paseto\ProtocolInterface; 
use PHPUnit\Framework\TestCase; 
 
/** 
 * Class PKETest 
 * @package ParagonIE\Paserk\Tests\Operations 
 * 
 * @covers PKE 
 */ 
class PKETest extends TestCase 
{ 
    /** @var ProtocolInterface[] */ 
    protected array $versions = []; 
 
    public function setUp(): void 
    { 
        $this->versions = [ 
            new Version3(), 
            new Version4() 
        ]; 
    } 
 
    public function testPKE() 
    { 
        foreach ($this->versions as $v) { 
            $key = SymmetricKey::generate($v); 
            $sk = SealingSecretKey::generate($v); 
            /** @var SealingPublicKey $pk */ 
            $pk = $sk->getPublicKey(); 
 
            $pke = new PKE($v); 
            $sealed = $pke->seal($key, $pk); 
            $opened = $pke->unseal($sealed, $sk); 
            $this->assertSame( 
                $opened->encode(), 
                $key->encode() 
            ); 
        } 
    } 
} 
 
 |