public static function getPublicRSAKey() { $errorSettings = error_reporting(0); $pemString = file_get_contents('key.pem'); $keyPair = Crypt_RSA_KeyPair::fromPEMString($pemString); $math_obj =& Crypt_RSA_MathLoader::loadWrapper('default'); $publicKey = $keyPair->getPublicKey(); $keyArray = array('exponent' => $math_obj->bin2int($publicKey->getExponent()), 'modulus' => $math_obj->bin2int($publicKey->getModulus())); if ($math_obj->getWrapperName() == 'GMP') { $keyArray = array_map('gmp_strval', $keyArray); } error_reporting($errorSettings); return $keyArray; }
function wrap_rsa_get_key_size($keypair = '') { global $last_rsa_error; global $wrap_rsa_default_key_size; if ($keypair === '') { return $wrap_rsa_default_key_size; } $key_pair = Crypt_RSA_KeyPair::fromPEMString($keypair, 'default', 'wrap_rsa_cerr'); if ($last_rsa_error !== false) { return false; } $public_key = $key_pair->getPublicKey(); if (wrap_rsa_cerr($public_key)) { return false; } $length = (int) $public_key->getKeyLength(); if (wrap_rsa_cerr($public_key)) { return false; } return $length; }
//define('MATH_LIBRARY', 'BCMath'); $errors = array(); echo "Start of testing Crypt_RSA package with [", MATH_LIBRARY, "] math library...\n"; /////////////////////////////////////////////// // test all functionality of Crypt_RSA_KeyPair class /////////////////////////////////////////////// $key_pair = new Crypt_RSA_KeyPair(128, MATH_LIBRARY, 'check_error'); $public_key = $key_pair->getPublicKey(); $private_key = $key_pair->getPrivateKey(); $key_length = $key_pair->getKeyLength(); if ($key_length != 128) { $errors[] = "wrong result returned from Crypt_RSA_KeyPair::getKeyLength() function"; } // check fromPEMString() and toPEMString() functions of Crypt_RSA_KeyPair class $str_in = "\n-----BEGIN RSA PRIVATE KEY-----\nMIIBPAIBAAJBAKSLT0KZTXYxHr6U/9GYBbnV8vxGkIleDE4aiVMRxuofOjcHDCoI\nqsrVjgP78BrVqWMAAeQ9i0dXxz9zhy0+h7MCAwEAAQJBAI6OL1Yo0Uaj2doN5vDk\nf5l4dfMBA7ovZAPK08zHawlsLvZTzxOQJhKquN01aIJA2wpzixcC9T2PgI6XW6jx\nHkECIQDOEVpVZcE2tSnU3TwulVAC8V82akNAEH8ht6eqsEVWkwIhAMxqMc4Av7hs\nioAs1H9NvkF01xYVhyiEc4rzgVlmjp5hAiEAi53AOYnmvd1CyWFXrCwn+MZ2/xRC\nGj7TFBItvH0PjZcCIBi9kaGZPZsYp/qzclSmGCzb81xc5qrkvQdISZOEciaBAiEA\nvLq0MTN4jkO2DOC4qxvKc1l4383nks1g/cljSO/y0pw=\n-----END RSA PRIVATE KEY-----\n"; $key_pair = Crypt_RSA_KeyPair::fromPEMString($str_in, MATH_LIBRARY, 'check_error'); $public_key = $key_pair->getPublicKey(); $private_key = $key_pair->getPrivateKey(); $key_length = $key_pair->getKeyLength(); if ($key_length != 512) { $errors[] = "incorrect key length retrieved from PEM string"; } $rsa_obj = new Crypt_RSA(array(), MATH_LIBRARY, 'check_error'); $text = 'test text'; $enc_text = $rsa_obj->encrypt($text, $public_key); $dec_text = $rsa_obj->decrypt($enc_text, $private_key); if ($dec_text != $text) { $errors[] = "decrypted text differs from encrypted text in Crypt_RSA_KeyPair::fromPEMString() check"; } $str_out = $key_pair->toPEMString(); $str_in = str_replace($str_in, array("\r", "\n"), '');