mirror of
https://github.com/phpseclib/phpseclib.git
synced 2024-12-27 03:42:40 +00:00
- sped up Math_BigInteger
- fixed a bug whereby partial RSA keys didn't function properly (thanks, CountZero!) - fixed a bug that prevented setPrecision from working correctly with non multiples of eight - fixed a few E_NOTICEs git-svn-id: http://phpseclib.svn.sourceforge.net/svnroot/phpseclib/trunk@76 21d32557-59b3-4da0-833f-c5933fad653e
This commit is contained in:
parent
b1787c1529
commit
a8f0567527
@ -62,7 +62,7 @@
|
|||||||
* @author Jim Wigginton <terrafrost@php.net>
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
* @copyright MMIX Jim Wigginton
|
* @copyright MMIX Jim Wigginton
|
||||||
* @license http://www.gnu.org/licenses/lgpl.txt
|
* @license http://www.gnu.org/licenses/lgpl.txt
|
||||||
* @version $Id: RSA.php,v 1.7 2009-12-31 06:11:06 terrafrost Exp $
|
* @version $Id: RSA.php,v 1.8 2010-01-21 00:52:10 terrafrost Exp $
|
||||||
* @link http://phpseclib.sourceforge.net
|
* @link http://phpseclib.sourceforge.net
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -417,7 +417,7 @@ class Crypt_RSA {
|
|||||||
* @param optional Integer $timeout
|
* @param optional Integer $timeout
|
||||||
* @param optional Math_BigInteger $p
|
* @param optional Math_BigInteger $p
|
||||||
*/
|
*/
|
||||||
function createKey($bits = 1024, $timeout = false, $primes = array())
|
function createKey($bits = 1024, $timeout = false, $partial = array())
|
||||||
{
|
{
|
||||||
if ( CRYPT_RSA_MODE == CRYPT_RSA_MODE_OPENSSL ) {
|
if ( CRYPT_RSA_MODE == CRYPT_RSA_MODE_OPENSSL ) {
|
||||||
$rsa = openssl_pkey_new(array('private_key_bits' => $bits));
|
$rsa = openssl_pkey_new(array('private_key_bits' => $bits));
|
||||||
@ -468,15 +468,19 @@ class Crypt_RSA {
|
|||||||
$finalMax = $max;
|
$finalMax = $max;
|
||||||
extract($this->_generateMinMax($temp));
|
extract($this->_generateMinMax($temp));
|
||||||
|
|
||||||
$exponents = $coefficients = array();
|
|
||||||
$generator = new Math_BigInteger();
|
$generator = new Math_BigInteger();
|
||||||
$generator->setRandomGenerator('crypt_random');
|
$generator->setRandomGenerator('crypt_random');
|
||||||
|
|
||||||
$n = $this->one->copy();
|
$n = $this->one->copy();
|
||||||
$lcm = array(
|
if (!empty($partial)) {
|
||||||
'top' => $this->one->copy(),
|
extract(unserialize($partial));
|
||||||
'bottom' => false
|
} else {
|
||||||
);
|
$exponents = $coefficients = $primes = array();
|
||||||
|
$lcm = array(
|
||||||
|
'top' => $this->one->copy(),
|
||||||
|
'bottom' => false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
$start = time();
|
$start = time();
|
||||||
$i0 = count($primes) + 1;
|
$i0 = count($primes) + 1;
|
||||||
@ -487,11 +491,16 @@ class Crypt_RSA {
|
|||||||
$timeout-= time() - $start;
|
$timeout-= time() - $start;
|
||||||
$start = time();
|
$start = time();
|
||||||
if ($timeout <= 0) {
|
if ($timeout <= 0) {
|
||||||
return array(
|
return serialize(array(
|
||||||
'privatekey' => '',
|
'privatekey' => '',
|
||||||
'publickey' => '',
|
'publickey' => '',
|
||||||
'partialkey' => $primes
|
'partialkey' => array(
|
||||||
);
|
'primes' => $primes,
|
||||||
|
'coefficients' => $coefficients,
|
||||||
|
'lcm' => $lcm,
|
||||||
|
'exponents' => $exponents
|
||||||
|
)
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($i == $num_primes) {
|
if ($i == $num_primes) {
|
||||||
@ -508,7 +517,12 @@ class Crypt_RSA {
|
|||||||
return array(
|
return array(
|
||||||
'privatekey' => '',
|
'privatekey' => '',
|
||||||
'publickey' => '',
|
'publickey' => '',
|
||||||
'partialkey' => array_slice($primes, 0, $i - 1)
|
'partialkey' => empty($primes) ? '' : serialize(array(
|
||||||
|
'primes' => array_slice($primes, 0, $i - 1),
|
||||||
|
'coefficients' => $coefficients,
|
||||||
|
'lcm' => $lcm,
|
||||||
|
'exponents' => $exponents
|
||||||
|
))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -571,7 +585,6 @@ class Crypt_RSA {
|
|||||||
function _convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients)
|
function _convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients)
|
||||||
{
|
{
|
||||||
$num_primes = count($primes);
|
$num_primes = count($primes);
|
||||||
|
|
||||||
$raw = array(
|
$raw = array(
|
||||||
'version' => $num_primes == 2 ? chr(0) : chr(1), // two-prime vs. multi
|
'version' => $num_primes == 2 ? chr(0) : chr(1), // two-prime vs. multi
|
||||||
'modulus' => $n->toBytes(true),
|
'modulus' => $n->toBytes(true),
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user