From f03185ea446ecbbed7a0bdc8a92e4c608c579b99 Mon Sep 17 00:00:00 2001 From: Daniel O'Connor Date: Sat, 18 Jul 2009 09:57:48 +0000 Subject: [PATCH] Request #15516 - Refactoring of tests, one class per file :D git-svn-id: http://svn.php.net/repository/pear/packages/Crypt_RSA/trunk@284302 c90b9560-bf6c-de11-be94-00142212c4b1 --- tests/AllTests.php | 4 + tests/DriverTest.php | 159 +++------------------------------ tests/KeyPairTest.php | 199 ++++++++++++++++++++++++++++++++++++++++++ tests/KeyTest.php | 125 ++++++++++++++++++++++++++ 4 files changed, 338 insertions(+), 149 deletions(-) create mode 100644 tests/KeyPairTest.php create mode 100644 tests/KeyTest.php diff --git a/tests/AllTests.php b/tests/AllTests.php index 3a0e320..60204b6 100644 --- a/tests/AllTests.php +++ b/tests/AllTests.php @@ -8,6 +8,8 @@ require_once 'FactoryTest.php'; require_once 'DriverTest.php'; +require_once 'KeyTest.php'; +require_once 'KeyPairTest.php'; class Crypt_RSA_AllTests { @@ -18,6 +20,8 @@ public static function main() { public static function suite() { $suite = new PHPUnit_Framework_TestSuite( "Crypt_RSA Tests"); $suite->addTestSuite('Crypt_RSA_DriverTest'); + $suite->addTestSuite('Crypt_RSA_KeyTest'); + $suite->addTestSuite('Crypt_RSA_KeyPairTest'); $suite->addTestSuite('Crypt_RSA_FactoryTest'); return $suite; } diff --git a/tests/DriverTest.php b/tests/DriverTest.php index cf15ab6..2974633 100644 --- a/tests/DriverTest.php +++ b/tests/DriverTest.php @@ -62,148 +62,8 @@ public static function drivers() { /** * @dataProvider drivers */ - public function testKeyLength($driver) { - $key_pair = new Crypt_RSA_KeyPair(128, $driver, 'check_error'); - - $public_key = $key_pair->getPublicKey(); - $private_key = $key_pair->getPrivateKey(); - $key_length = $key_pair->getKeyLength(); - - $this->assertSame(128, $key_length, "wrong result returned from Crypt_RSA_KeyPair::getKeyLength() function"); - } - - /** - * @dataProvider drivers - */ - public function testPEMStringParsing($driver) { - // check fromPEMString() and toPEMString() functions of Crypt_RSA_KeyPair class - $str_in = " - -----BEGIN RSA PRIVATE KEY----- - MIIBPAIBAAJBAKSLT0KZTXYxHr6U/9GYBbnV8vxGkIleDE4aiVMRxuofOjcHDCoI - qsrVjgP78BrVqWMAAeQ9i0dXxz9zhy0+h7MCAwEAAQJBAI6OL1Yo0Uaj2doN5vDk - f5l4dfMBA7ovZAPK08zHawlsLvZTzxOQJhKquN01aIJA2wpzixcC9T2PgI6XW6jx - HkECIQDOEVpVZcE2tSnU3TwulVAC8V82akNAEH8ht6eqsEVWkwIhAMxqMc4Av7hs - ioAs1H9NvkF01xYVhyiEc4rzgVlmjp5hAiEAi53AOYnmvd1CyWFXrCwn+MZ2/xRC - Gj7TFBItvH0PjZcCIBi9kaGZPZsYp/qzclSmGCzb81xc5qrkvQdISZOEciaBAiEA - vLq0MTN4jkO2DOC4qxvKc1l4383nks1g/cljSO/y0pw= - -----END RSA PRIVATE KEY----- - "; - - $key_pair = Crypt_RSA_KeyPair::fromPEMString($str_in, $driver, 'check_error'); - - $public_key = $key_pair->getPublicKey(); - $private_key = $key_pair->getPrivateKey(); - $key_length = $key_pair->getKeyLength(); - - $this->assertSame(512, $key_length, "incorrect key length retrieved from PEM string"); - } - - /** - * @dataProvider drivers - */ - public function testDecryption($driver) { - // Setup - $str_in = " - -----BEGIN RSA PRIVATE KEY----- - MIIBPAIBAAJBAKSLT0KZTXYxHr6U/9GYBbnV8vxGkIleDE4aiVMRxuofOjcHDCoI - qsrVjgP78BrVqWMAAeQ9i0dXxz9zhy0+h7MCAwEAAQJBAI6OL1Yo0Uaj2doN5vDk - f5l4dfMBA7ovZAPK08zHawlsLvZTzxOQJhKquN01aIJA2wpzixcC9T2PgI6XW6jx - HkECIQDOEVpVZcE2tSnU3TwulVAC8V82akNAEH8ht6eqsEVWkwIhAMxqMc4Av7hs - ioAs1H9NvkF01xYVhyiEc4rzgVlmjp5hAiEAi53AOYnmvd1CyWFXrCwn+MZ2/xRC - Gj7TFBItvH0PjZcCIBi9kaGZPZsYp/qzclSmGCzb81xc5qrkvQdISZOEciaBAiEA - vLq0MTN4jkO2DOC4qxvKc1l4383nks1g/cljSO/y0pw= - -----END RSA PRIVATE KEY----- - "; - - $key_pair = Crypt_RSA_KeyPair::fromPEMString($str_in, $driver, 'check_error'); - - $public_key = $key_pair->getPublicKey(); - $private_key = $key_pair->getPrivateKey(); - - //Test - $rsa_obj = new Crypt_RSA(array(), $driver, 'check_error'); - - $text = 'test text'; - $enc_text = $rsa_obj->encrypt($text, $public_key); - $dec_text = $rsa_obj->decrypt($enc_text, $private_key); - - $this->assertSame($dec_text, $text, "decrypted text differs from encrypted text in Crypt_RSA_KeyPair::fromPEMString() check"); - - } - - /** - * @dataProvider drivers - */ - public function testEverything($driver) { + public function testCrypt_RSA($driver) { $errors = array(); - - // Setup - $str_in = " - -----BEGIN RSA PRIVATE KEY----- - MIIBPAIBAAJBAKSLT0KZTXYxHr6U/9GYBbnV8vxGkIleDE4aiVMRxuofOjcHDCoI - qsrVjgP78BrVqWMAAeQ9i0dXxz9zhy0+h7MCAwEAAQJBAI6OL1Yo0Uaj2doN5vDk - f5l4dfMBA7ovZAPK08zHawlsLvZTzxOQJhKquN01aIJA2wpzixcC9T2PgI6XW6jx - HkECIQDOEVpVZcE2tSnU3TwulVAC8V82akNAEH8ht6eqsEVWkwIhAMxqMc4Av7hs - ioAs1H9NvkF01xYVhyiEc4rzgVlmjp5hAiEAi53AOYnmvd1CyWFXrCwn+MZ2/xRC - Gj7TFBItvH0PjZcCIBi9kaGZPZsYp/qzclSmGCzb81xc5qrkvQdISZOEciaBAiEA - vLq0MTN4jkO2DOC4qxvKc1l4383nks1g/cljSO/y0pw= - -----END RSA PRIVATE KEY----- - "; - - $key_pair = Crypt_RSA_KeyPair::fromPEMString($str_in, $driver, 'check_error'); - - - $str_out = $key_pair->toPEMString(); - - $str_in = str_replace(array("\r", "\n"), '', $str_in); - $str_out = str_replace(array("\r", "\n"), '', $str_out); - if ($str_in != $str_out) { - $errors[] = "PEM strings handling seems to be broken"; - } - - // try to generate 256-bit keypair and convert it to PEM string, - // then convert this string to another keypair and compare them - $key_pair->generate(256); - - $str1 = $key_pair->toPEMString(); - $key_pair2 = $key_pair->fromPEMString($str1); - if (!$key_pair->isEqual($key_pair2) || !$key_pair2->isEqual($key_pair)) { - $errors[] = "RSA_KeyPair::isEqual() is broken"; - } - - /////////////////////////////////////////////// - // test all functionality of Crypt_RSA_Key class - /////////////////////////////////////////////// - $rsa_obj = new Crypt_RSA(array(), $driver, 'check_error'); - $key_pair = new Crypt_RSA_KeyPair(32, $driver, 'check_error'); // extra small key pair (32-bit) - - $public_key = $key_pair->getPublicKey(); - $private_key = $key_pair->getPrivateKey(); - - // check the length of public key - if ($public_key->getKeyLength() != 32) { - $errors[] = "wrong result returned from Crypt_RSA_Key::getKeyLength() function"; - } - - // construct copy of $public_key - $public_key1 = new Crypt_RSA_Key($public_key->getModulus(), $public_key->getExponent(), $public_key->getKeyType(), $driver, 'check_error'); - - // serialize $private_key - $private_key_str = $private_key->toString(); - - // try to use $public_key1 for encryption and unserialized form - // $private_key_str key for decryption - - $text = '1234567890'; - $enc_text = $rsa_obj->encrypt($text, $public_key1); - - $private_key = Crypt_RSA_Key::fromString($private_key_str, $driver, 'check_error'); - $text1 = $rsa_obj->decrypt($enc_text, $private_key); - - if ($text != $text1) { - $errors[] = "error in Crypt_RSA_Key class methods"; - } - /////////////////////////////////////////////// // test all functionality of Crypt_RSA class /////////////////////////////////////////////// @@ -276,10 +136,9 @@ public function testEverything($driver) { $this->assertTrue(empty($errors), print_r($errors, true)); - - } + } @@ -290,13 +149,15 @@ public function testEverything($driver) { /**************************************/ -function check_error(&$obj) -{ - if ($obj->isError()) { - $error = $obj->getLastError(); - echo "error: ", $error->getMessage(), "\n"; -// var_dump($error->getBacktrace()); +if (!function_exists('check_error')) { + function check_error(&$obj) + { + if ($obj->isError()) { + $error = $obj->getLastError(); + echo "error: ", $error->getMessage(), "\n"; + // var_dump($error->getBacktrace()); + } } } diff --git a/tests/KeyPairTest.php b/tests/KeyPairTest.php new file mode 100644 index 0000000..4135b5e --- /dev/null +++ b/tests/KeyPairTest.php @@ -0,0 +1,199 @@ + + * @copyright 2005, 2006 Alexander Valyalkin + * @license http://www.php.net/license/3_0.txt PHP License 3.0 + * @version 1.2.0b + * @link http://pear.php.net/package/Crypt_RSA + */ + +/** + * this is a test script, which checks functionality of + * Crypt_RSA package with different math wrappers. It + * checks such things as: + * - key generation, + * - encryption / decryption + * - signing / sign validation + */ + + +require_once 'Crypt/RSA.php'; +require_once 'PHPUnit/Framework/TestCase.php'; + +class Crypt_RSA_KeyPairTest extends PHPUnit_Framework_TestCase { + + /** + * Load one or more drivers. + */ + public static function drivers() { + $drivers = array(); + if (extension_loaded('GMP')) { + $drivers[] = array('GMP'); + } + if (extension_loaded('big_int')) { + $drivers[] = array('BigInt'); + } + + + $drivers[] = array('BCMath'); + + + return $drivers; + } + + /** + * @dataProvider drivers + */ + public function testKeyLength($driver) { + $key_pair = new Crypt_RSA_KeyPair(128, $driver, 'check_error'); + + $public_key = $key_pair->getPublicKey(); + $private_key = $key_pair->getPrivateKey(); + $key_length = $key_pair->getKeyLength(); + + $this->assertSame(128, $key_length, "wrong result returned from Crypt_RSA_KeyPair::getKeyLength() function"); + } + + /** + * @dataProvider drivers + */ + public function testPEMStringParsing($driver) { + // check fromPEMString() and toPEMString() functions of Crypt_RSA_KeyPair class + $str_in = " + -----BEGIN RSA PRIVATE KEY----- + MIIBPAIBAAJBAKSLT0KZTXYxHr6U/9GYBbnV8vxGkIleDE4aiVMRxuofOjcHDCoI + qsrVjgP78BrVqWMAAeQ9i0dXxz9zhy0+h7MCAwEAAQJBAI6OL1Yo0Uaj2doN5vDk + f5l4dfMBA7ovZAPK08zHawlsLvZTzxOQJhKquN01aIJA2wpzixcC9T2PgI6XW6jx + HkECIQDOEVpVZcE2tSnU3TwulVAC8V82akNAEH8ht6eqsEVWkwIhAMxqMc4Av7hs + ioAs1H9NvkF01xYVhyiEc4rzgVlmjp5hAiEAi53AOYnmvd1CyWFXrCwn+MZ2/xRC + Gj7TFBItvH0PjZcCIBi9kaGZPZsYp/qzclSmGCzb81xc5qrkvQdISZOEciaBAiEA + vLq0MTN4jkO2DOC4qxvKc1l4383nks1g/cljSO/y0pw= + -----END RSA PRIVATE KEY----- + "; + + $key_pair = Crypt_RSA_KeyPair::fromPEMString($str_in, $driver, 'check_error'); + + $public_key = $key_pair->getPublicKey(); + $private_key = $key_pair->getPrivateKey(); + $key_length = $key_pair->getKeyLength(); + + $this->assertSame(512, $key_length, "incorrect key length retrieved from PEM string"); + } + + /** + * @dataProvider drivers + */ + public function testDecryption($driver) { + // Setup + $str_in = " + -----BEGIN RSA PRIVATE KEY----- + MIIBPAIBAAJBAKSLT0KZTXYxHr6U/9GYBbnV8vxGkIleDE4aiVMRxuofOjcHDCoI + qsrVjgP78BrVqWMAAeQ9i0dXxz9zhy0+h7MCAwEAAQJBAI6OL1Yo0Uaj2doN5vDk + f5l4dfMBA7ovZAPK08zHawlsLvZTzxOQJhKquN01aIJA2wpzixcC9T2PgI6XW6jx + HkECIQDOEVpVZcE2tSnU3TwulVAC8V82akNAEH8ht6eqsEVWkwIhAMxqMc4Av7hs + ioAs1H9NvkF01xYVhyiEc4rzgVlmjp5hAiEAi53AOYnmvd1CyWFXrCwn+MZ2/xRC + Gj7TFBItvH0PjZcCIBi9kaGZPZsYp/qzclSmGCzb81xc5qrkvQdISZOEciaBAiEA + vLq0MTN4jkO2DOC4qxvKc1l4383nks1g/cljSO/y0pw= + -----END RSA PRIVATE KEY----- + "; + + $key_pair = Crypt_RSA_KeyPair::fromPEMString($str_in, $driver, 'check_error'); + + $public_key = $key_pair->getPublicKey(); + $private_key = $key_pair->getPrivateKey(); + + //Test + $rsa_obj = new Crypt_RSA(array(), $driver, 'check_error'); + + $text = 'test text'; + $enc_text = $rsa_obj->encrypt($text, $public_key); + $dec_text = $rsa_obj->decrypt($enc_text, $private_key); + + $this->assertSame($dec_text, $text, "decrypted text differs from encrypted text in Crypt_RSA_KeyPair::fromPEMString() check"); + + } + + /** + * @dataProvider drivers + */ + public function testEverything($driver) { + $errors = array(); + + // Setup + $str_in = " + -----BEGIN RSA PRIVATE KEY----- + MIIBPAIBAAJBAKSLT0KZTXYxHr6U/9GYBbnV8vxGkIleDE4aiVMRxuofOjcHDCoI + qsrVjgP78BrVqWMAAeQ9i0dXxz9zhy0+h7MCAwEAAQJBAI6OL1Yo0Uaj2doN5vDk + f5l4dfMBA7ovZAPK08zHawlsLvZTzxOQJhKquN01aIJA2wpzixcC9T2PgI6XW6jx + HkECIQDOEVpVZcE2tSnU3TwulVAC8V82akNAEH8ht6eqsEVWkwIhAMxqMc4Av7hs + ioAs1H9NvkF01xYVhyiEc4rzgVlmjp5hAiEAi53AOYnmvd1CyWFXrCwn+MZ2/xRC + Gj7TFBItvH0PjZcCIBi9kaGZPZsYp/qzclSmGCzb81xc5qrkvQdISZOEciaBAiEA + vLq0MTN4jkO2DOC4qxvKc1l4383nks1g/cljSO/y0pw= + -----END RSA PRIVATE KEY----- + "; + + $key_pair = Crypt_RSA_KeyPair::fromPEMString($str_in, $driver, 'check_error'); + + + $str_out = $key_pair->toPEMString(); + + $str_in = str_replace(array("\r", "\n"), '', $str_in); + $str_out = str_replace(array("\r", "\n"), '', $str_out); + if ($str_in != $str_out) { + $errors[] = "PEM strings handling seems to be broken"; + } + + // try to generate 256-bit keypair and convert it to PEM string, + // then convert this string to another keypair and compare them + $key_pair->generate(256); + + $str1 = $key_pair->toPEMString(); + $key_pair2 = $key_pair->fromPEMString($str1); + if (!$key_pair->isEqual($key_pair2) || !$key_pair2->isEqual($key_pair)) { + $errors[] = "RSA_KeyPair::isEqual() is broken"; + } + + $this->assertTrue(empty($errors), print_r($errors, true)); + } + +} + + + + + + + + +/**************************************/ +if (!function_exists('check_error')) { + function check_error(&$obj) + { + if ($obj->isError()) { + $error = $obj->getLastError(); + echo "error: ", $error->getMessage(), "\n"; + // var_dump($error->getBacktrace()); + + } + } +} + +?> diff --git a/tests/KeyTest.php b/tests/KeyTest.php new file mode 100644 index 0000000..e3563c0 --- /dev/null +++ b/tests/KeyTest.php @@ -0,0 +1,125 @@ + + * @copyright 2005, 2006 Alexander Valyalkin + * @license http://www.php.net/license/3_0.txt PHP License 3.0 + * @version 1.2.0b + * @link http://pear.php.net/package/Crypt_RSA + */ + +/** + * this is a test script, which checks functionality of + * Crypt_RSA package with different math wrappers. It + * checks such things as: + * - key generation, + * - encryption / decryption + * - signing / sign validation + */ + + +require_once 'Crypt/RSA.php'; +require_once 'PHPUnit/Framework/TestCase.php'; + +class Crypt_RSA_KeyTest extends PHPUnit_Framework_TestCase { + + /** + * Load one or more drivers. + */ + public static function drivers() { + $drivers = array(); + if (extension_loaded('GMP')) { + $drivers[] = array('GMP'); + } + if (extension_loaded('big_int')) { + $drivers[] = array('BigInt'); + } + + + $drivers[] = array('BCMath'); + + + return $drivers; + } + + /** + * @dataProvider drivers + */ + public function testCrypt_RSA_Key($driver) { + $errors = array(); + /////////////////////////////////////////////// + // test all functionality of Crypt_RSA_Key class + /////////////////////////////////////////////// + $rsa_obj = new Crypt_RSA(array(), $driver, 'check_error'); + $key_pair = new Crypt_RSA_KeyPair(32, $driver, 'check_error'); // extra small key pair (32-bit) + + $public_key = $key_pair->getPublicKey(); + $private_key = $key_pair->getPrivateKey(); + + // check the length of public key + if ($public_key->getKeyLength() != 32) { + $errors[] = "wrong result returned from Crypt_RSA_Key::getKeyLength() function"; + } + + // construct copy of $public_key + $public_key1 = new Crypt_RSA_Key($public_key->getModulus(), $public_key->getExponent(), $public_key->getKeyType(), $driver, 'check_error'); + + // serialize $private_key + $private_key_str = $private_key->toString(); + + // try to use $public_key1 for encryption and unserialized form + // $private_key_str key for decryption + + $text = '1234567890'; + $enc_text = $rsa_obj->encrypt($text, $public_key1); + + $private_key = Crypt_RSA_Key::fromString($private_key_str, $driver, 'check_error'); + $text1 = $rsa_obj->decrypt($enc_text, $private_key); + + if ($text != $text1) { + $errors[] = "error in Crypt_RSA_Key class methods"; + } + + $this->assertTrue(empty($errors), print_r($errors, true)); + } + +} + + + + + + + + +/**************************************/ +if (!function_exists('check_error')) { + function check_error(&$obj) + { + if ($obj->isError()) { + $error = $obj->getLastError(); + echo "error: ", $error->getMessage(), "\n"; + // var_dump($error->getBacktrace()); + + } + } +} + +?>