diff --git a/phpseclib/Crypt/Hash.php b/phpseclib/Crypt/Hash.php index 8123d33b..54606d85 100644 --- a/phpseclib/Crypt/Hash.php +++ b/phpseclib/Crypt/Hash.php @@ -54,6 +54,8 @@ * @link http://phpseclib.sourceforge.net */ +use \phpseclib\Math\BigInteger; + /**#@+ * @access private * @see Crypt_Hash::Crypt_Hash() @@ -579,10 +581,6 @@ class Crypt_Hash */ function _sha512($m) { - if (!class_exists('Math_BigInteger')) { - include_once 'Math/BigInteger.php'; - } - static $init384, $init512, $k; if (!isset($k)) { @@ -597,9 +595,9 @@ class Crypt_Hash ); for ($i = 0; $i < 8; $i++) { - $init384[$i] = new Math_BigInteger($init384[$i], 16); + $init384[$i] = new BigInteger($init384[$i], 16); $init384[$i]->setPrecision(64); - $init512[$i] = new Math_BigInteger($init512[$i], 16); + $init512[$i] = new BigInteger($init512[$i], 16); $init512[$i]->setPrecision(64); } @@ -629,7 +627,7 @@ class Crypt_Hash ); for ($i = 0; $i < 80; $i++) { - $k[$i] = new Math_BigInteger($k[$i], 16); + $k[$i] = new BigInteger($k[$i], 16); } } @@ -648,7 +646,7 @@ class Crypt_Hash foreach ($chunks as $chunk) { $w = array(); for ($i = 0; $i < 16; $i++) { - $temp = new Math_BigInteger($this->_string_shift($chunk, 8), 256); + $temp = new BigInteger($this->_string_shift($chunk, 8), 256); $temp->setPrecision(64); $w[] = $temp; } @@ -802,7 +800,7 @@ class Crypt_Hash * Add * * _sha256() adds multiple unsigned 32-bit integers. Since PHP doesn't support unsigned integers and since the - * possibility of overflow exists, care has to be taken. Math_BigInteger() could be used but this should be faster. + * possibility of overflow exists, care has to be taken. BigInteger could be used but this should be faster. * * @param Integer $... * @return Integer diff --git a/phpseclib/Crypt/RSA.php b/phpseclib/Crypt/RSA.php index 68243b00..56b7a84e 100644 --- a/phpseclib/Crypt/RSA.php +++ b/phpseclib/Crypt/RSA.php @@ -67,6 +67,8 @@ * @link http://phpseclib.sourceforge.net */ +use \phpseclib\Math\BigInteger; + /** * Include Crypt_Random */ @@ -201,7 +203,7 @@ define('CRYPT_RSA_PRIVATE_FORMAT_XML', 2); /** * Raw public key * - * An array containing two Math_BigInteger objects. + * An array containing two \phpseclib\Math\BigInteger objects. * * The exponent can be indexed with any of the following: * @@ -280,7 +282,7 @@ class Crypt_RSA /** * Modulus (ie. n) * - * @var Math_BigInteger + * @var \phpseclib\Math\BigInteger * @access private */ var $modulus; @@ -288,7 +290,7 @@ class Crypt_RSA /** * Modulus length * - * @var Math_BigInteger + * @var \phpseclib\Math\BigInteger * @access private */ var $k; @@ -296,7 +298,7 @@ class Crypt_RSA /** * Exponent (ie. e or d) * - * @var Math_BigInteger + * @var \phpseclib\Math\BigInteger * @access private */ var $exponent; @@ -459,10 +461,6 @@ class Crypt_RSA */ function Crypt_RSA() { - if (!class_exists('Math_BigInteger')) { - include_once 'Math/BigInteger.php'; - } - $this->configFile = CRYPT_RSA_OPENSSL_CONFIG; if ( !defined('CRYPT_RSA_MODE') ) { @@ -507,8 +505,8 @@ class Crypt_RSA } } - $this->zero = new Math_BigInteger(); - $this->one = new Math_BigInteger(1); + $this->zero = new BigInteger(); + $this->one = new BigInteger(1); $this->hash = new Crypt_Hash('sha1'); $this->hLen = $this->hash->getLength(); @@ -529,7 +527,7 @@ class Crypt_RSA * @access public * @param optional Integer $bits * @param optional Integer $timeout - * @param optional Math_BigInteger $p + * @param optional array $p */ function createKey($bits = 1024, $timeout = false, $partial = array()) { @@ -573,7 +571,7 @@ class Crypt_RSA static $e; if (!isset($e)) { - $e = new Math_BigInteger(CRYPT_RSA_EXPONENT); + $e = new BigInteger(CRYPT_RSA_EXPONENT); } extract($this->_generateMinMax($bits)); @@ -589,7 +587,7 @@ class Crypt_RSA $finalMax = $max; extract($this->_generateMinMax($temp)); - $generator = new Math_BigInteger(); + $generator = new BigInteger(); $n = $this->one->copy(); if (!empty($partial)) { @@ -1100,10 +1098,10 @@ class Crypt_RSA $length = $this->_decodeLength($key); $temp = $this->_string_shift($key, $length); if (strlen($temp) != 1 || ord($temp) > 2) { - $components['modulus'] = new Math_BigInteger($temp, 256); + $components['modulus'] = new BigInteger($temp, 256); $this->_string_shift($key); // skip over CRYPT_RSA_ASN1_INTEGER $length = $this->_decodeLength($key); - $components[$type == CRYPT_RSA_PUBLIC_FORMAT_PKCS1 ? 'publicExponent' : 'privateExponent'] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $components[$type == CRYPT_RSA_PUBLIC_FORMAT_PKCS1 ? 'publicExponent' : 'privateExponent'] = new BigInteger($this->_string_shift($key, $length), 256); return $components; } @@ -1111,28 +1109,28 @@ class Crypt_RSA return false; } $length = $this->_decodeLength($key); - $components['modulus'] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $components['modulus'] = new BigInteger($this->_string_shift($key, $length), 256); $this->_string_shift($key); $length = $this->_decodeLength($key); - $components['publicExponent'] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $components['publicExponent'] = new BigInteger($this->_string_shift($key, $length), 256); $this->_string_shift($key); $length = $this->_decodeLength($key); - $components['privateExponent'] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $components['privateExponent'] = new BigInteger($this->_string_shift($key, $length), 256); $this->_string_shift($key); $length = $this->_decodeLength($key); - $components['primes'] = array(1 => new Math_BigInteger($this->_string_shift($key, $length), 256)); + $components['primes'] = array(1 => new BigInteger($this->_string_shift($key, $length), 256)); $this->_string_shift($key); $length = $this->_decodeLength($key); - $components['primes'][] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $components['primes'][] = new BigInteger($this->_string_shift($key, $length), 256); $this->_string_shift($key); $length = $this->_decodeLength($key); - $components['exponents'] = array(1 => new Math_BigInteger($this->_string_shift($key, $length), 256)); + $components['exponents'] = array(1 => new BigInteger($this->_string_shift($key, $length), 256)); $this->_string_shift($key); $length = $this->_decodeLength($key); - $components['exponents'][] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $components['exponents'][] = new BigInteger($this->_string_shift($key, $length), 256); $this->_string_shift($key); $length = $this->_decodeLength($key); - $components['coefficients'] = array(2 => new Math_BigInteger($this->_string_shift($key, $length), 256)); + $components['coefficients'] = array(2 => new BigInteger($this->_string_shift($key, $length), 256)); if (!empty($key)) { if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) { @@ -1146,13 +1144,13 @@ class Crypt_RSA $this->_decodeLength($key); $key = substr($key, 1); $length = $this->_decodeLength($key); - $components['primes'][] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $components['primes'][] = new BigInteger($this->_string_shift($key, $length), 256); $this->_string_shift($key); $length = $this->_decodeLength($key); - $components['exponents'][] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $components['exponents'][] = new BigInteger($this->_string_shift($key, $length), 256); $this->_string_shift($key); $length = $this->_decodeLength($key); - $components['coefficients'][] = new Math_BigInteger($this->_string_shift($key, $length), 256); + $components['coefficients'][] = new BigInteger($this->_string_shift($key, $length), 256); } } @@ -1173,19 +1171,19 @@ class Crypt_RSA return false; } extract(unpack('Nlength', $this->_string_shift($key, 4))); - $publicExponent = new Math_BigInteger($this->_string_shift($key, $length), -256); + $publicExponent = new BigInteger($this->_string_shift($key, $length), -256); if (strlen($key) <= 4) { return false; } extract(unpack('Nlength', $this->_string_shift($key, 4))); - $modulus = new Math_BigInteger($this->_string_shift($key, $length), -256); + $modulus = new BigInteger($this->_string_shift($key, $length), -256); if ($cleanup && strlen($key)) { if (strlen($key) <= 4) { return false; } extract(unpack('Nlength', $this->_string_shift($key, 4))); - $realModulus = new Math_BigInteger($this->_string_shift($key, $length), -256); + $realModulus = new BigInteger($this->_string_shift($key, $length), -256); return strlen($key) ? false : array( 'modulus' => $realModulus, 'publicExponent' => $modulus, @@ -1229,9 +1227,9 @@ class Crypt_RSA $public = base64_decode(implode('', array_map('trim', array_slice($key, 4, $publicLength)))); $public = substr($public, 11); extract(unpack('Nlength', $this->_string_shift($public, 4))); - $components['publicExponent'] = new Math_BigInteger($this->_string_shift($public, $length), -256); + $components['publicExponent'] = new BigInteger($this->_string_shift($public, $length), -256); extract(unpack('Nlength', $this->_string_shift($public, 4))); - $components['modulus'] = new Math_BigInteger($this->_string_shift($public, $length), -256); + $components['modulus'] = new BigInteger($this->_string_shift($public, $length), -256); $privateLength = trim(preg_replace('#Private-Lines: (\d+)#', '$1', $key[$publicLength + 4])); $private = base64_decode(implode('', array_map('trim', array_slice($key, $publicLength + 5, $privateLength)))); @@ -1264,17 +1262,17 @@ class Crypt_RSA if (strlen($private) < $length) { return false; } - $components['privateExponent'] = new Math_BigInteger($this->_string_shift($private, $length), -256); + $components['privateExponent'] = new BigInteger($this->_string_shift($private, $length), -256); extract(unpack('Nlength', $this->_string_shift($private, 4))); if (strlen($private) < $length) { return false; } - $components['primes'] = array(1 => new Math_BigInteger($this->_string_shift($private, $length), -256)); + $components['primes'] = array(1 => new BigInteger($this->_string_shift($private, $length), -256)); extract(unpack('Nlength', $this->_string_shift($private, 4))); if (strlen($private) < $length) { return false; } - $components['primes'][] = new Math_BigInteger($this->_string_shift($private, $length), -256); + $components['primes'][] = new BigInteger($this->_string_shift($private, $length), -256); $temp = $components['primes'][1]->subtract($this->one); $components['exponents'] = array(1 => $components['publicExponent']->modInverse($temp)); @@ -1285,7 +1283,7 @@ class Crypt_RSA if (strlen($private) < $length) { return false; } - $components['coefficients'] = array(2 => new Math_BigInteger($this->_string_shift($private, $length), -256)); + $components['coefficients'] = array(2 => new BigInteger($this->_string_shift($private, $length), -256)); return $components; } @@ -1357,7 +1355,7 @@ class Crypt_RSA function _stop_element_handler($parser, $name) { if (isset($this->current)) { - $this->current = new Math_BigInteger(base64_decode($this->current), 256); + $this->current = new BigInteger(base64_decode($this->current), 256); unset($this->current); } } @@ -1729,8 +1727,8 @@ class Crypt_RSA } return array( - 'min' => new Math_BigInteger($min, 256), - 'max' => new Math_BigInteger($max, 256) + 'min' => new BigInteger($min, 256), + 'max' => new BigInteger($max, 256) ); } @@ -1894,7 +1892,7 @@ class Crypt_RSA * See {@link http://tools.ietf.org/html/rfc3447#section-4.1 RFC3447#section-4.1}. * * @access private - * @param Math_BigInteger $x + * @param \phpseclib\Math\BigInteger $x * @param Integer $xLen * @return String */ @@ -1915,11 +1913,11 @@ class Crypt_RSA * * @access private * @param String $x - * @return Math_BigInteger + * @return \phpseclib\Math\BigInteger */ function _os2ip($x) { - return new Math_BigInteger($x, 256); + return new BigInteger($x, 256); } /** @@ -1928,8 +1926,8 @@ class Crypt_RSA * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.2}. * * @access private - * @param Math_BigInteger $x - * @return Math_BigInteger + * @param \phpseclib\Math\BigInteger $x + * @return \phpseclib\Math\BigInteger */ function _exponentiate($x) { @@ -1969,7 +1967,7 @@ class Crypt_RSA } } - $one = new Math_BigInteger(1); + $one = new BigInteger(1); $r = $one->random($one, $smallest->subtract($one)); @@ -2006,10 +2004,10 @@ class Crypt_RSA * Returns $x->modPow($this->exponents[$i], $this->primes[$i]) * * @access private - * @param Math_BigInteger $x - * @param Math_BigInteger $r + * @param \phpseclib\Math\BigInteger $x + * @param \phpseclib\Math\BigInteger $r * @param Integer $i - * @return Math_BigInteger + * @return \phpseclib\Math\BigInteger */ function _blind($x, $r, $i) { @@ -2057,8 +2055,8 @@ class Crypt_RSA * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.1}. * * @access private - * @param Math_BigInteger $m - * @return Math_BigInteger + * @param \phpseclib\Math\BigInteger $m + * @return \phpseclib\Math\BigInteger */ function _rsaep($m) { @@ -2075,8 +2073,8 @@ class Crypt_RSA * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.2 RFC3447#section-5.1.2}. * * @access private - * @param Math_BigInteger $c - * @return Math_BigInteger + * @param \phpseclib\Math\BigInteger $c + * @return \phpseclib\Math\BigInteger */ function _rsadp($c) { @@ -2093,8 +2091,8 @@ class Crypt_RSA * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.1 RFC3447#section-5.2.1}. * * @access private - * @param Math_BigInteger $m - * @return Math_BigInteger + * @param \phpseclib\Math\BigInteger $m + * @return \phpseclib\Math\BigInteger */ function _rsasp1($m) { @@ -2111,8 +2109,8 @@ class Crypt_RSA * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.2 RFC3447#section-5.2.2}. * * @access private - * @param Math_BigInteger $s - * @return Math_BigInteger + * @param \phpseclib\Math\BigInteger $s + * @return \phpseclib\Math\BigInteger */ function _rsavp1($s) { diff --git a/phpseclib/File/ASN1.php b/phpseclib/File/ASN1.php index 2774e7e8..0601f48c 100644 --- a/phpseclib/File/ASN1.php +++ b/phpseclib/File/ASN1.php @@ -39,6 +39,8 @@ * @link http://phpseclib.sourceforge.net */ +use \phpseclib\Math\BigInteger; + /**#@+ * Tag Classes * @@ -240,22 +242,6 @@ class File_ASN1 FILE_ASN1_TYPE_VISIBLE_STRING => 1, ); - /** - * Default Constructor. - * - * @access public - */ - function File_ASN1() - { - static $static_init = null; - if (!$static_init) { - $static_init = true; - if (!class_exists('Math_BigInteger')) { - include_once 'Math/BigInteger.php'; - } - } - } - /** * Parse BER-encoding * @@ -377,7 +363,7 @@ class File_ASN1 break; case FILE_ASN1_TYPE_INTEGER: case FILE_ASN1_TYPE_ENUMERATED: - $current['content'] = new Math_BigInteger($content, -256); + $current['content'] = new BigInteger($content, -256); break; case FILE_ASN1_TYPE_REAL: // not currently supported return false; @@ -773,7 +759,7 @@ class File_ASN1 case FILE_ASN1_TYPE_ENUMERATED: $temp = $decoded['content']; if (isset($mapping['implicit'])) { - $temp = new Math_BigInteger($decoded['content'], -256); + $temp = new BigInteger($decoded['content'], -256); } if (isset($mapping['mapping'])) { $temp = (int) $temp->toString(); @@ -951,7 +937,7 @@ class File_ASN1 case FILE_ASN1_TYPE_ENUMERATED: if (!isset($mapping['mapping'])) { if (is_numeric($source)) { - $source = new Math_BigInteger($source); + $source = new BigInteger($source); } $value = $source->toBytes(true); } else { @@ -959,7 +945,7 @@ class File_ASN1 if ($value === false) { return false; } - $value = new Math_BigInteger($value); + $value = new BigInteger($value); $value = $value->toBytes(true); } if (!strlen($value)) { @@ -1044,7 +1030,7 @@ class File_ASN1 case !isset($source): return $this->_encode_der(null, array('type' => FILE_ASN1_TYPE_NULL) + $mapping, null, $special); case is_int($source): - case is_object($source) && strtolower(get_class($source)) == 'math_biginteger': + case is_object($source) && strtolower(get_class($source)) == 'math_biginteger': // TODO return $this->_encode_der($source, array('type' => FILE_ASN1_TYPE_INTEGER) + $mapping, null, $special); case is_float($source): return $this->_encode_der($source, array('type' => FILE_ASN1_TYPE_REAL) + $mapping, null, $special); diff --git a/phpseclib/File/X509.php b/phpseclib/File/X509.php index e8c001aa..53c57249 100644 --- a/phpseclib/File/X509.php +++ b/phpseclib/File/X509.php @@ -305,10 +305,6 @@ class File_X509 */ function File_X509() { - if (!class_exists('Math_BigInteger')) { - include_once 'Math/BigInteger.php'; - } - // Explicitly Tagged Module, 1988 Syntax // http://tools.ietf.org/html/rfc5280#appendix-A.1 @@ -971,7 +967,7 @@ class File_X509 'constant' => 0, 'optional' => true, 'implicit' => true, - 'default' => new Math_BigInteger(0) + 'default' => new BigInteger(0) ) + $BaseDistance, 'maximum' => array( 'constant' => 1, @@ -3197,7 +3193,7 @@ class File_X509 $startDate = !empty($this->startDate) ? $this->startDate : @date('D, d M Y H:i:s O'); $endDate = !empty($this->endDate) ? $this->endDate : @date('D, d M Y H:i:s O', strtotime('+1 year')); - $serialNumber = !empty($this->serialNumber) ? $this->serialNumber : new Math_BigInteger(); + $serialNumber = !empty($this->serialNumber) ? $this->serialNumber : new BigInteger(); $this->currentCert = array( 'tbsCertificate' => @@ -3421,7 +3417,7 @@ class File_X509 $crlNumber = $this->serialNumber; } else { $crlNumber = $this->getExtension('id-ce-cRLNumber'); - $crlNumber = $crlNumber !== false ? $crlNumber->add(new Math_BigInteger(1)) : null; + $crlNumber = $crlNumber !== false ? $crlNumber->add(new BigInteger(1)) : null; } $this->removeExtension('id-ce-authorityKeyIdentifier'); @@ -3572,7 +3568,7 @@ class File_X509 */ function setSerialNumber($serial, $base = -256) { - $this->serialNumber = new Math_BigInteger($serial, $base); + $this->serialNumber = new BigInteger($serial, $base); } /** @@ -4219,7 +4215,7 @@ class File_X509 */ function _revokedCertificate(&$rclist, $serial, $create = false) { - $serial = new Math_BigInteger($serial); + $serial = new BigInteger($serial); foreach ($rclist as $i => $rc) { if (!($serial->compare($rc['userCertificate']))) { diff --git a/phpseclib/Net/SFTP.php b/phpseclib/Net/SFTP.php index 002c8e6d..f2d628de 100644 --- a/phpseclib/Net/SFTP.php +++ b/phpseclib/Net/SFTP.php @@ -2267,7 +2267,7 @@ class Net_SFTP extends Net_SSH2 switch ($flags & $key) { case NET_SFTP_ATTR_SIZE: // 0x00000001 // size is represented by a 64-bit integer, so we perhaps ought to be doing the following: - // $attr['size'] = new Math_BigInteger($this->_string_shift($response, 8), 256); + // $attr['size'] = new \phpseclib\Math\BigInteger($this->_string_shift($response, 8), 256); // of course, you shouldn't be using Net_SFTP to transfer files that are in excess of 4GB // (0xFFFFFFFF bytes), anyway. as such, we'll just represent all file sizes that are bigger than // 4GB as being 4GB. diff --git a/phpseclib/Net/SSH1.php b/phpseclib/Net/SSH1.php index 15e659a9..d4fbdf06 100644 --- a/phpseclib/Net/SSH1.php +++ b/phpseclib/Net/SSH1.php @@ -64,6 +64,8 @@ * @link http://phpseclib.sourceforge.net */ +use \phpseclib\Math\BigInteger; + /**#@+ * Encryption Methods * @@ -517,10 +519,6 @@ class Net_SSH1 */ function Net_SSH1($host, $port = 22, $timeout = 10, $cipher = NET_SSH1_CIPHER_3DES) { - if (!class_exists('Math_BigInteger')) { - include_once 'Math/BigInteger.php'; - } - // Include Crypt_Random // the class_exists() will only be called if the crypt_random_string function hasn't been defined and // will trigger a call to __autoload() if you're wanting to auto-load classes @@ -600,21 +598,21 @@ class Net_SSH1 $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4); $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2)); - $server_key_public_exponent = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256); + $server_key_public_exponent = new BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256); $this->server_key_public_exponent = $server_key_public_exponent; $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2)); - $server_key_public_modulus = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256); + $server_key_public_modulus = new BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256); $this->server_key_public_modulus = $server_key_public_modulus; $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4); $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2)); - $host_key_public_exponent = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256); + $host_key_public_exponent = new BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256); $this->host_key_public_exponent = $host_key_public_exponent; $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2)); - $host_key_public_modulus = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256); + $host_key_public_modulus = new BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256); $this->host_key_public_modulus = $host_key_public_modulus; $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4); @@ -1377,7 +1375,7 @@ class Net_SSH1 } $temp = chr(0) . chr(2) . $random . chr(0) . $m; - $m = new Math_BigInteger($temp, 256); + $m = new BigInteger($temp, 256); $m = $m->modPow($key[0], $key[1]); return $m->toBytes(); diff --git a/phpseclib/Net/SSH2.php b/phpseclib/Net/SSH2.php index 39fa6d9c..da9c7899 100644 --- a/phpseclib/Net/SSH2.php +++ b/phpseclib/Net/SSH2.php @@ -66,6 +66,9 @@ * @link http://phpseclib.sourceforge.net */ +// Used to do Diffie-Hellman key exchange and DSA/RSA signature verification. +use \phpseclib\Math\BigInteger; + /**#@+ * Execution Bitmap Masks * @@ -830,12 +833,6 @@ class Net_SSH2 */ function Net_SSH2($host, $port = 22, $timeout = 10) { - // Include Math_BigInteger - // Used to do Diffie-Hellman key exchange and DSA/RSA signature verification. - if (!class_exists('Math_BigInteger')) { - include_once 'Math/BigInteger.php'; - } - if (!function_exists('crypt_random_string')) { include_once 'Crypt/Random.php'; } @@ -1353,8 +1350,8 @@ class Net_SSH2 // For both diffie-hellman-group1-sha1 and diffie-hellman-group14-sha1 // the generator field element is 2 (decimal) and the hash function is sha1. - $g = new Math_BigInteger(2); - $prime = new Math_BigInteger($prime, 16); + $g = new BigInteger(2); + $prime = new BigInteger($prime, 16); $kexHash = new Crypt_Hash('sha1'); //$q = $p->bitwise_rightShift(1); @@ -1365,7 +1362,7 @@ class Net_SSH2 [VAN-OORSCHOT]. -- http://tools.ietf.org/html/rfc4419#section-6.2 */ - $one = new Math_BigInteger(1); + $one = new BigInteger(1); $keyLength = min($keyLength, $kexHash->getLength()); $max = $one->bitwise_leftShift(16 * $keyLength); // 2 * 8 * $keyLength $max = $max->subtract($one); @@ -1401,7 +1398,7 @@ class Net_SSH2 $temp = unpack('Nlength', $this->_string_shift($response, 4)); $fBytes = $this->_string_shift($response, $temp['length']); - $f = new Math_BigInteger($fBytes, -256); + $f = new BigInteger($fBytes, -256); $temp = unpack('Nlength', $this->_string_shift($response, 4)); $this->signature = $this->_string_shift($response, $temp['length']); @@ -3641,19 +3638,19 @@ class Net_SSH2 switch ($this->signature_format) { case 'ssh-dss': - $zero = new Math_BigInteger(); + $zero = new BigInteger(); $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); - $p = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + $p = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); - $q = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + $q = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); - $g = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + $g = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); - $y = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + $y = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); /* The value for 'dss_signature_blob' is encoded as a string containing r, followed by s (which are 160-bit integers, without lengths or @@ -3664,8 +3661,8 @@ class Net_SSH2 return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } - $r = new Math_BigInteger($this->_string_shift($signature, 20), 256); - $s = new Math_BigInteger($this->_string_shift($signature, 20), 256); + $r = new BigInteger($this->_string_shift($signature, 20), 256); + $s = new BigInteger($this->_string_shift($signature, 20), 256); switch (true) { case $r->equals($zero): @@ -3678,7 +3675,7 @@ class Net_SSH2 $w = $s->modInverse($q); - $u1 = $w->multiply(new Math_BigInteger(sha1($this->exchange_hash), 16)); + $u1 = $w->multiply(new BigInteger(sha1($this->exchange_hash), 16)); list(, $u1) = $u1->divide($q); $u2 = $w->multiply($r); @@ -3699,10 +3696,10 @@ class Net_SSH2 break; case 'ssh-rsa': $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); - $e = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + $e = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); - $n = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + $n = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); $nLength = $temp['length']; /* @@ -3723,7 +3720,7 @@ class Net_SSH2 */ $temp = unpack('Nlength', $this->_string_shift($signature, 4)); - $s = new Math_BigInteger($this->_string_shift($signature, $temp['length']), 256); + $s = new BigInteger($this->_string_shift($signature, $temp['length']), 256); // validate an RSA signature per "8.2 RSASSA-PKCS1-v1_5", "5.2.2 RSAVP1", and "9.1 EMSA-PSS" in the // following URL: @@ -3731,7 +3728,7 @@ class Net_SSH2 // also, see SSHRSA.c (rsa2_verifysig) in PuTTy's source. - if ($s->compare(new Math_BigInteger()) < 0 || $s->compare($n->subtract(new Math_BigInteger(1))) > 0) { + if ($s->compare(new BigInteger()) < 0 || $s->compare($n->subtract(new BigInteger(1))) > 0) { user_error('Invalid signature'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); }