Mercurial > hg > rc1
diff vendor/pear/crypt_gpg/tests/KeyGeneratorTest.php @ 0:1e000243b222
vanilla 1.3.3 distro, I hope
author | Charlie Root |
---|---|
date | Thu, 04 Jan 2018 15:50:29 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/pear/crypt_gpg/tests/KeyGeneratorTest.php Thu Jan 04 15:50:29 2018 -0500 @@ -0,0 +1,981 @@ +<?php + +/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ + +/** + * Key generation tests for the Crypt_GPG package. + * + * These tests require the PHPUnit 3.6 or greater package to be installed. + * PHPUnit is installable using PEAR. See the + * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual} + * for detailed installation instructions. + * + * To run these tests, use: + * <code> + * $ phpunit KeyGeneratorTestCase + * </code> + * + * LICENSE: + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of the + * License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see + * <http://www.gnu.org/licenses/> + * + * @category Encryption + * @package Crypt_GPG + * @author Michael Gauthier <mike@silverorange.com> + * @copyright 2005-2011 silverorange + * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 + * @version CVS: $Id: GetKeysTestCase.php 274158 2009-01-22 06:33:54Z gauthierm $ + * @link http://pear.php.net/package/Crypt_GPG + */ + +/** + * Base test case. + */ +require_once 'TestCase.php'; + +/** + * The Crypt_GPG class to test + */ +require_once 'Crypt/GPG/KeyGenerator.php'; + +/** + * Tests key generation of Crypt_GPG. + * + * @category Encryption + * @package Crypt_GPG + * @author Michael Gauthier <mike@silverorange.com> + * @copyright 2005-2011 silverorange + * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 + * @link http://pear.php.net/package/Crypt_GPG + */ +class KeyGeneratorTestCase extends Crypt_GPG_TestCase +{ + // helper methods + // {{{ assertKeyEquals() + + protected function assertKeyEquals( + Crypt_GPG_Key $key1, + Crypt_GPG_Key $key2 + ) { + $userIds1 = $key1->getUserIds(); + $userIds2 = $key2->getUserIds(); + $userId1 = $userIds1[0]; + $userId2 = $userIds2[0]; + $subKeys1 = $key1->getSubKeys(); + $subKeys2 = $key2->getSubKeys(); + $subKeyA1 = $subKeys1[0]; + $subKeyB1 = $subKeys1[1]; + $subKeyA2 = $subKeys2[0]; + $subKeyB2 = $subKeys2[1]; + + $this->assertEquals( + $userId1->getName(), + $userId2->getName(), + 'User id names do not match.' + ); + + $this->assertEquals( + $userId1->getEmail(), + $userId2->getEmail(), + 'User id email addresses do not match.' + ); + + $this->assertEquals( + $userId1->getComment(), + $userId2->getComment(), + 'User id comments do not match.' + ); + + $this->assertEquals( + $subKeyA1->getAlgorithm(), + $subKeyA2->getAlgorithm(), + 'Primary key algorithms do not match.' + ); + + $this->assertEquals( + $subKeyA1->getLength(), + $subKeyA2->getLength(), + 'Primary key lengths do not match.' + ); + + $this->assertEquals( + $subKeyA1->getExpirationDate(), + $subKeyA2->getExpirationDate(), + 'Primary key expiration dates do not match.' + ); + + $this->assertEquals( + $subKeyA1->canSign(), + $subKeyA2->canSign(), + 'Primary key signing abilities do not match.' + ); + + $this->assertEquals( + $subKeyA1->canEncrypt(), + $subKeyA2->canEncrypt(), + 'Primary key encrypting abilities do not match.' + ); + + $this->assertEquals( + $subKeyA1->hasPrivate(), + $subKeyA2->hasPrivate(), + 'Primary key private keys do not match.' + ); + + $this->assertEquals( + $subKeyB1->getAlgorithm(), + $subKeyB2->getAlgorithm(), + 'Secondary key algorithms do not match.' + ); + + $this->assertEquals( + $subKeyB1->getLength(), + $subKeyB2->getLength(), + 'Secondary key lengths do not match.' + ); + + $this->assertEquals( + $subKeyB1->getExpirationDate(), + $subKeyB2->getExpirationDate(), + 'Secondary key expiration dates do not match.' + ); + + $this->assertEquals( + $subKeyB1->canSign(), + $subKeyB2->canSign(), + 'Secondary key signing abilities do not match.' + ); + + $this->assertEquals( + $subKeyB1->canEncrypt(), + $subKeyB2->canEncrypt(), + 'Secondary key encrypting abilities do not match.' + ); + + $this->assertEquals( + $subKeyB1->hasPrivate(), + $subKeyB2->hasPrivate(), + 'Secondary key private keys do not match.' + ); + } + + // }}} + // {{{ setUp() + + public function setUp() + { + parent::setUp(); + $this->generator = new Crypt_GPG_KeyGenerator($this->getOptions()); + } + + // }}} + + // mutators + // {{{ testSetExpirationDate_zero() + + /** + * @group mutators + */ + public function testSetExpirationDate_zero() + { + $expectedDate = 0; + $this->generator->setExpirationDate(0); + + $this->assertAttributeEquals( + $expectedDate, + 'expirationDate', + $this->generator, + 'Setting expiration date to zero failed.' + ); + } + + // }}} + // {{{ testSetExpirationDate_integer() + + /** + * @group mutators + */ + public function testSetExpirationDate_integer() + { + $expectedDate = 2000000000; + $this->generator->setExpirationDate(2000000000); + + $this->assertAttributeEquals( + $expectedDate, + 'expirationDate', + $this->generator, + 'Setting expiration date by integer failed.' + ); + } + + // }}} + // {{{ testSetExpirationDate_string() + + /** + * @group mutators + */ + public function testSetExpirationDate_string() + { + date_default_timezone_set('UTC'); + + $expectedDate = 2000000000; + $this->generator->setExpirationDate('2033-05-18T03:33:20'); + + $this->assertAttributeEquals( + $expectedDate, + 'expirationDate', + $this->generator, + 'Setting expiration date by string failed.' + ); + } + + // }}} + // {{{ testSetExpirationDate_invalid_format() + + /** + * @group mutators + * @expectedException InvalidArgumentException + */ + public function testSetExpirationDate_invalid_format() + { + date_default_timezone_set('UTC'); + + $this->generator->setExpirationDate('this is not a date'); + } + + // }}} + // {{{ testSetExpirationDate_too_early_date() + + /** + * @group mutators + * @expectedException InvalidArgumentException + */ + public function testSetExpirationDate_too_early_date() + { + $this->generator->setExpirationDate(1301088055); + } + + // }}} + // {{{ testSetExpirationDate_today() + + /** + * @group mutators + * @expectedException InvalidArgumentException + */ + public function testSetExpirationDate_today() + { + $this->generator->setExpirationDate(time()); + } + + // }}} + // {{{ testSetExpirationDate_too_late_date() + + /** + * @group mutators + * @expectedException InvalidArgumentException + */ + public function testSetExpirationDate_too_late_date() + { + $this->generator->setExpirationDate(2147483648); + } + + // }}} + // {{{ testSetPassphrase() + + /** + * @group mutators + */ + public function testSetPassphrase() + { + $expectedPassphrase = 'test1'; + $this->generator->setPassphrase('test1'); + + $this->assertAttributeEquals( + $expectedPassphrase, + 'passphrase', + $this->generator, + 'Setting passphrase failed.' + ); + } + + // }}} + // {{{ testSetKeyParams_algorithm() + + /** + * @group mutators + */ + public function testSetKeyParams_algorithm() + { + $expectedAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN; + $expectedSize = 1024; + $expectedUsage = Crypt_GPG_SubKey::USAGE_SIGN + | Crypt_GPG_SubKey::USAGE_CERTIFY; + + $this->generator->setKeyParams( + Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN + ); + + $this->assertAttributeEquals( + $expectedAlgorithm, + 'keyAlgorithm', + $this->generator, + 'Setting key algorithm failed.' + ); + + $this->assertAttributeEquals( + $expectedSize, + 'keySize', + $this->generator, + 'Setting key algorithm changed key size.' + ); + + $this->assertAttributeEquals( + $expectedUsage, + 'keyUsage', + $this->generator, + 'Setting key algorithm changed key usage.' + ); + } + + // }}} + // {{{ testSetKeyParams_algorithm_and_size() + + /** + * @group mutators + */ + public function testSetKeyParams_algorithm_and_size() + { + $expectedAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN; + $expectedSize = 512; + $expectedUsage = Crypt_GPG_SubKey::USAGE_SIGN + | Crypt_GPG_SubKey::USAGE_CERTIFY; + + $this->generator->setKeyParams( + Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN, + 512 + ); + + $this->assertAttributeEquals( + $expectedAlgorithm, + 'keyAlgorithm', + $this->generator, + 'Setting key algorithm failed.' + ); + + $this->assertAttributeEquals( + $expectedSize, + 'keySize', + $this->generator, + 'Setting key size failed.' + ); + + $this->assertAttributeEquals( + $expectedUsage, + 'keyUsage', + $this->generator, + 'Setting key algorithm and size changed key usage.' + ); + } + + // }}} + // {{{ testSetKeyParams_algorithm_size_and_usage() + + /** + * @group mutators + */ + public function testSetKeyParams_algorithm_size_and_usage() + { + $expectedAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN; + $expectedSize = 512; + $expectedUsage = Crypt_GPG_SubKey::USAGE_SIGN + | Crypt_GPG_SubKey::USAGE_CERTIFY + | Crypt_GPG_SubKey::USAGE_ENCRYPT; + + $this->generator->setKeyParams( + Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN, + 512, + Crypt_GPG_SubKey::USAGE_SIGN + | Crypt_GPG_SubKey::USAGE_CERTIFY + | Crypt_GPG_SubKey::USAGE_ENCRYPT + ); + + $this->assertAttributeEquals( + $expectedAlgorithm, + 'keyAlgorithm', + $this->generator, + 'Setting key algorithm failed.' + ); + + $this->assertAttributeEquals( + $expectedSize, + 'keySize', + $this->generator, + 'Setting key size failed.' + ); + + $this->assertAttributeEquals( + $expectedUsage, + 'keyUsage', + $this->generator, + 'Setting key usage failed.' + ); + } + + // }}} + // {{{ testSetKeyParams_invalid_algorithm() + + /** + * @group mutators + * @expectedException Crypt_GPG_InvalidKeyParamsException + */ + public function testSetKeyParams_invalid_algorithm() + { + $this->generator->setKeyParams(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC); + } + + // }}} + // {{{ testSetKeyParams_invalid_dsa_usage() + + /** + * @group mutators + * @expectedException Crypt_GPG_InvalidKeyParamsException + */ + public function testSetKeyParams_invalid_dsa_usage() + { + $this->generator->setKeyParams( + Crypt_GPG_SubKey::ALGORITHM_DSA, + 2048, + Crypt_GPG_SubKey::USAGE_ENCRYPT | Crypt_GPG_SubKey::USAGE_CERTIFY + ); + } + + // }}} + // {{{ testSetSubKeyParams_algorithm() + + /** + * @group mutators + */ + public function testSetSubKeyParams_algorithm() + { + $expectedAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN; + $expectedSize = 2048; + $expectedUsage = Crypt_GPG_SubKey::USAGE_ENCRYPT; + + $this->generator->setSubKeyParams( + Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN + ); + + $this->assertAttributeEquals( + $expectedAlgorithm, + 'subKeyAlgorithm', + $this->generator, + 'Setting sub-key algorithm failed.' + ); + + $this->assertAttributeEquals( + $expectedSize, + 'subKeySize', + $this->generator, + 'Setting sub-key algorithm changed key size.' + ); + + $this->assertAttributeEquals( + $expectedUsage, + 'subKeyUsage', + $this->generator, + 'Setting sub-key algorithm changed key usage.' + ); + } + + // }}} + // {{{ testSetSubKeyParams_algorithm_and_size() + + /** + * @group mutators + */ + public function testSetSubKeyParams_algorithm_and_size() + { + $expectedAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN; + $expectedSize = 1024; + $expectedUsage = Crypt_GPG_SubKey::USAGE_ENCRYPT; + + $this->generator->setSubKeyParams( + Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN, + 1024 + ); + + $this->assertAttributeEquals( + $expectedAlgorithm, + 'subKeyAlgorithm', + $this->generator, + 'Setting sub-key algorithm failed.' + ); + + $this->assertAttributeEquals( + $expectedSize, + 'subKeySize', + $this->generator, + 'Setting sub-key size failed.' + ); + + $this->assertAttributeEquals( + $expectedUsage, + 'subKeyUsage', + $this->generator, + 'Setting sub-key algorithm and size changed key usage.' + ); + } + + // }}} + // {{{ testSetSubKeyParams_algorithm_size_and_usage() + + /** + * @group mutators + */ + public function testSetSubKeyParams_algorithm_size_and_usage() + { + $expectedAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN; + $expectedSize = 1024; + $expectedUsage = Crypt_GPG_SubKey::USAGE_SIGN + | Crypt_GPG_SubKey::USAGE_ENCRYPT; + + $this->generator->setSubKeyParams( + Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN, + 1024, + Crypt_GPG_SubKey::USAGE_SIGN + | Crypt_GPG_SubKey::USAGE_ENCRYPT + ); + + $this->assertAttributeEquals( + $expectedAlgorithm, + 'subKeyAlgorithm', + $this->generator, + 'Setting sub-key algorithm failed.' + ); + + $this->assertAttributeEquals( + $expectedSize, + 'subKeySize', + $this->generator, + 'Setting sub-key size failed.' + ); + + $this->assertAttributeEquals( + $expectedUsage, + 'subKeyUsage', + $this->generator, + 'Setting sub-key usage failed.' + ); + } + + // }}} + // {{{ testSetSubKeyParams_invalid_elgamal_usage() + + /** + * @group mutators + * @expectedException Crypt_GPG_InvalidKeyParamsException + */ + public function testSetSubKeyParams_invalid_elgamal_usage() + { + $this->generator->setSubKeyParams( + Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC, + 2048, + Crypt_GPG_SubKey::USAGE_SIGN | Crypt_GPG_SubKey::USAGE_ENCRYPT + ); + } + + // }}} + // {{{ testSetSubKeyParams_invalid_dsa_usage() + + /** + * @group mutators + * @expectedException Crypt_GPG_InvalidKeyParamsException + */ + public function testSetSubKeyParams_invalid_dsa_usage() + { + $this->generator->setSubKeyParams( + Crypt_GPG_SubKey::ALGORITHM_DSA, + 2048, + Crypt_GPG_SubKey::USAGE_SIGN | Crypt_GPG_SubKey::USAGE_ENCRYPT + ); + } + + // }}} + + // generate key tests + // {{{ testGenerateKeyWithName() + + /** + * @group generate-key + */ + public function testGenerateKeyWithName() + { + if (!$this->config['enable-key-generation']) { + $this->markTestSkipped( + 'Key generation tests are disabled. To run key generation ' + . 'tests, enable them in the test configuration. See the ' + . 'configuration in \'config.php.dist\' for an exampe.' + ); + } + + // {{{ generate-test@example.com + $expectedKey = new Crypt_GPG_Key(); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('Test Keypair'); + $expectedKey->addUserId($userId); + + $subKey = new Crypt_GPG_SubKey(); + $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA); + $subKey->setLength(1024); + $subKey->setExpirationDate(0); + $subKey->setCanSign(true); + $subKey->setCanEncrypt(false); + $subKey->setHasPrivate(true); + $expectedKey->addSubKey($subKey); + + $subKey = new Crypt_GPG_SubKey(); + $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC); + $subKey->setLength(2048); + $subKey->setExpirationDate(0); + $subKey->setCanSign(false); + $subKey->setCanEncrypt(true); + $subKey->setHasPrivate(true); + $expectedKey->addSubKey($subKey); + // }}} + + $key = $this->generator->generateKey('Test Keypair'); + + $this->assertKeyEquals($expectedKey, $key); + } + + // }}} + // {{{ testGenerateKeyWithNameAndEmail() + + /** + * @group generate-key + */ + public function testGenerateKeyWithNameAndEmail() + { + if (!$this->config['enable-key-generation']) { + $this->markTestSkipped( + 'Key generation tests are disabled. To run key generation ' + . 'tests, enable them in the test configuration. See the ' + . 'configuration in \'config.php.dist\' for an exampe.' + ); + } + + // {{{ generate-test@example.com + $expectedKey = new Crypt_GPG_Key(); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('Test Keypair'); + $userId->setEmail('generate-test@example.com'); + $expectedKey->addUserId($userId); + + $subKey = new Crypt_GPG_SubKey(); + $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA); + $subKey->setLength(1024); + $subKey->setExpirationDate(0); + $subKey->setCanSign(true); + $subKey->setCanEncrypt(false); + $subKey->setHasPrivate(true); + $expectedKey->addSubKey($subKey); + + $subKey = new Crypt_GPG_SubKey(); + $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC); + $subKey->setLength(2048); + $subKey->setExpirationDate(0); + $subKey->setCanSign(false); + $subKey->setCanEncrypt(true); + $subKey->setHasPrivate(true); + $expectedKey->addSubKey($subKey); + // }}} + + $key = $this->generator->generateKey( + 'Test Keypair', + 'generate-test@example.com' + ); + + $this->assertKeyEquals($expectedKey, $key); + } + + // }}} + // {{{ testGenerateKeyWithNameEmailAndComment() + + /** + * @group generate-key + */ + public function testGenerateKeyWithNameEmailAndComment() + { + if (!$this->config['enable-key-generation']) { + $this->markTestSkipped( + 'Key generation tests are disabled. To run key generation ' + . 'tests, enable them in the test configuration. See the ' + . 'configuration in \'config.php.dist\' for an exampe.' + ); + } + + // {{{ generate-test@example.com + $expectedKey = new Crypt_GPG_Key(); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('Test Keypair'); + $userId->setComment('do not use this key'); + $userId->setEmail('generate-test@example.com'); + $expectedKey->addUserId($userId); + + $subKey = new Crypt_GPG_SubKey(); + $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA); + $subKey->setLength(1024); + $subKey->setExpirationDate(0); + $subKey->setCanSign(true); + $subKey->setCanEncrypt(false); + $subKey->setHasPrivate(true); + $expectedKey->addSubKey($subKey); + + $subKey = new Crypt_GPG_SubKey(); + $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC); + $subKey->setLength(2048); + $subKey->setExpirationDate(0); + $subKey->setCanSign(false); + $subKey->setCanEncrypt(true); + $subKey->setHasPrivate(true); + $expectedKey->addSubKey($subKey); + // }}} + + $key = $this->generator->generateKey( + 'Test Keypair', + 'generate-test@example.com', + 'do not use this key' + ); + + $this->assertKeyEquals($expectedKey, $key); + } + + // }}} + // {{{ testGenerateKeyWithUserId() + + /** + * @group generate-key + */ + public function testGenerateKeyWithUserId() + { + if (!$this->config['enable-key-generation']) { + $this->markTestSkipped( + 'Key generation tests are disabled. To run key generation ' + . 'tests, enable them in the test configuration. See the ' + . 'configuration in \'config.php.dist\' for an exampe.' + ); + } + + // {{{ generate-test@example.com + $expectedKey = new Crypt_GPG_Key(); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('Test Keypair'); + $userId->setEmail('generate-test@example.com'); + $expectedKey->addUserId($userId); + + $subKey = new Crypt_GPG_SubKey(); + $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA); + $subKey->setLength(1024); + $subKey->setExpirationDate(0); + $subKey->setCanSign(true); + $subKey->setCanEncrypt(false); + $subKey->setHasPrivate(true); + $expectedKey->addSubKey($subKey); + + $subKey = new Crypt_GPG_SubKey(); + $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC); + $subKey->setLength(2048); + $subKey->setExpirationDate(0); + $subKey->setCanSign(false); + $subKey->setCanEncrypt(true); + $subKey->setHasPrivate(true); + $expectedKey->addSubKey($subKey); + // }}} + + $key = $this->generator->generateKey( + new Crypt_GPG_UserId( + 'Test Keypair <generate-test@example.com>' + ) + ); + + $this->assertKeyEquals($expectedKey, $key); + } + + // }}} + // {{{ testGenerateKeyWithPassphrase() + + /** + * @group generate-key + */ + public function testGenerateKeyWithPassphrase() + { + if (!$this->config['enable-key-generation']) { + $this->markTestSkipped( + 'Key generation tests are disabled. To run key generation ' + . 'tests, enable them in the test configuration. See the ' + . 'configuration in \'config.php.dist\' for an exampe.' + ); + } + + // {{{ generate-test@example.com + $expectedKey = new Crypt_GPG_Key(); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('Test Keypair'); + $userId->setEmail('generate-test@example.com'); + $expectedKey->addUserId($userId); + + $subKey = new Crypt_GPG_SubKey(); + $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA); + $subKey->setLength(1024); + $subKey->setExpirationDate(0); + $subKey->setCanSign(true); + $subKey->setCanEncrypt(false); + $subKey->setHasPrivate(true); + $expectedKey->addSubKey($subKey); + + $subKey = new Crypt_GPG_SubKey(); + $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC); + $subKey->setLength(2048); + $subKey->setExpirationDate(0); + $subKey->setCanSign(false); + $subKey->setCanEncrypt(true); + $subKey->setHasPrivate(true); + $expectedKey->addSubKey($subKey); + // }}} + + $key = $this->generator->setPassphrase('test1')->generateKey( + new Crypt_GPG_UserId( + 'Test Keypair <generate-test@example.com>' + ) + ); + + $this->assertKeyEquals($expectedKey, $key); + } + + // }}} + // {{{ testGenerateKeyWithExpirationDate() + + /** + * @group generate-key + */ + public function testGenerateKeyWithExpirationDate() + { + if (!$this->config['enable-key-generation']) { + $this->markTestSkipped( + 'Key generation tests are disabled. To run key generation ' + . 'tests, enable them in the test configuration. See the ' + . 'configuration in \'config.php.dist\' for an exampe.' + ); + } + + // {{{ generate-test@example.com + $expectedKey = new Crypt_GPG_Key(); + + $userId = new Crypt_GPG_UserId(); + $userId->setName('Test Keypair'); + $userId->setEmail('generate-test@example.com'); + $expectedKey->addUserId($userId); + + $subKey = new Crypt_GPG_SubKey(); + $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_DSA); + $subKey->setLength(1024); + $subKey->setExpirationDate(1999998000); // truncated to day + $subKey->setCanSign(true); + $subKey->setCanEncrypt(false); + $subKey->setHasPrivate(true); + $expectedKey->addSubKey($subKey); + + $subKey = new Crypt_GPG_SubKey(); + $subKey->setAlgorithm(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC); + $subKey->setLength(2048); + $subKey->setExpirationDate(1999998000); // truncated to day + $subKey->setCanSign(false); + $subKey->setCanEncrypt(true); + $subKey->setHasPrivate(true); + $expectedKey->addSubKey($subKey); + // }}} + + $key = $this->generator->setExpirationDate(2000000000)->generateKey( + new Crypt_GPG_UserId( + 'Test Keypair <generate-test@example.com>' + ) + ); + + // @TODO: I've got difference in expiration dates here + + $this->assertKeyEquals($expectedKey, $key); + } + + // }}} + // {{{ testGenerateKeyWithInvalidPrimaryKeyAlgorithm() + + /** + * @group generate-key + * @expectedException Crypt_GPG_InvalidKeyParamsException + */ + public function testGenerateKeyWithInvalidPrimaryKeyAlgorithm() + { + if (!$this->config['enable-key-generation']) { + $this->markTestSkipped( + 'Key generation tests are disabled. To run key generation ' + . 'tests, enable them in the test configuration. See the ' + . 'configuration in \'config.php.dist\' for an exampe.' + ); + } + + $key = $this->generator + ->setKeyParams(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN) + ->generateKey( + new Crypt_GPG_UserId( + 'Test Keypair <generate-test@example.com>' + ) + ); + } + + // }}} + // {{{ testGenerateKeyWithInvalidSubKeyAlgorithm() + + /** + * @group generate-key + * @expectedException Crypt_GPG_InvalidKeyParamsException + */ + public function testGenerateKeyWithInvalidSubKeyAlgorithm() + { + if (!$this->config['enable-key-generation']) { + $this->markTestSkipped( + 'Key generation tests are disabled. To run key generation ' + . 'tests, enable them in the test configuration. See the ' + . 'configuration in \'config.php.dist\' for an exampe.' + ); + } + + $key = $this->generator + ->setSubKeyParams(Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC_SGN) + ->generateKey( + new Crypt_GPG_UserId( + 'Test Keypair <generate-test@example.com>' + ) + ); + } + + // }}} +} + +?>