| 
<?phpuse \ParagonIE\Halite\KeyFactory;
 use \ParagonIE\Halite\Asymmetric\Crypto as Asymmetric;
 use \ParagonIE\Halite\Asymmetric\SecretKey as ASecretKey;
 use \ParagonIE\Halite\Asymmetric\PublicKey as APublicKey;
 
 /**
 * @backupGlobals disabled
 * @backupStaticAttributes disabled
 */
 class KeyPairTest extends PHPUnit_Framework_TestCase
 {
 public function testDeriveLegacySigningKey()
 {
 $keypair = KeyFactory::deriveSignatureKeyPair(
 'apple',
 "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f".
 "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
 true
 );
 $sign_secret = $keypair->getSecretKey();
 $sign_public = $keypair->getPublicKey();
 
 $this->assertTrue($sign_secret instanceof ASecretKey);
 $this->assertTrue($sign_public instanceof APublicKey);
 
 // Can this be used?
 $message = 'This is a test message';
 $signed = Asymmetric::sign(
 $message,
 $sign_secret
 );
 $this->assertTrue(
 Asymmetric::verify($message, $sign_public, $signed)
 );
 
 $this->assertEquals(
 $sign_public->get(),
 "\xfe\x1b\x09\x86\x45\xb7\x04\xf5\xc2\x7f\x62\xc8\x61\x67\xd6\x09".
 "\x03\x1d\x95\xa7\x94\x5c\xe6\xd5\x55\x96\xe3\x75\x03\x17\x88\x34"
 );
 }
 
 public function testDeriveSigningKey()
 {
 $keypair = KeyFactory::deriveSignatureKeyPair(
 'apple',
 "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
 );
 $sign_secret = $keypair->getSecretKey();
 $sign_public = $keypair->getPublicKey();
 
 $this->assertTrue($sign_secret instanceof ASecretKey);
 $this->assertTrue($sign_public instanceof APublicKey);
 
 // Can this be used?
 $message = 'This is a test message';
 $signed = Asymmetric::sign(
 $message,
 $sign_secret
 );
 $this->assertTrue(
 Asymmetric::verify($message, $sign_public, $signed)
 );
 
 $this->assertEquals(
 $sign_public->get(),
 "\x18\x2e\xc0\x3e\xb8\x74\x0c\xff\xb3\x8e\xea\xdf\xfe\x8c\xe9\x39".
 "\x37\x7d\xfd\xee\xa4\x6d\x06\xc9\x4b\x83\xeb\x54\x20\x73\x4f\xba"
 );
 }
 
 public function testFileStorage()
 {
 $filename = \tempnam(__DIR__.'/tmp/', 'key');
 $key = KeyFactory::generateEncryptionKeyPair();
 KeyFactory::save($key, $filename);
 
 $copy = KeyFactory::loadEncryptionKeyPair($filename);
 
 $this->assertEquals(
 $key->getPublicKey()->get(),
 $copy->getPublicKey()->get()
 );
 \unlink($filename);
 }
 
 /**
 * @covers \ParagonIE\Halite\Asymmetric\EncryptionSecretKey::derivePublicKey()
 * @covers \ParagonIE\Halite\Asymmetric\SignatureSecretKey::derivePublicKey()
 */
 public function testPublicDerivation()
 {
 $enc_kp = KeyFactory::generateEncryptionKeyPair();
 $enc_secret = $enc_kp->getSecretKey();
 $enc_public = $enc_kp->getPublicKey();
 
 $this->assertEquals(
 $enc_secret->derivePublicKey()->get(),
 $enc_public->get()
 );
 
 $sign_kp = KeyFactory::generateSignatureKeyPair();
 $sign_secret = $sign_kp->getSecretKey();
 $sign_public = $sign_kp->getPublicKey();
 $this->assertEquals(
 $sign_secret->derivePublicKey()->get(),
 $sign_public->get()
 );
 }
 }
 
 |