mirror of
https://github.com/phpseclib/phpseclib.git
synced 2024-11-16 02:07:09 +00:00
Merge branch 'master' of https://github.com/phpseclib/phpseclib into openssl-support
This commit is contained in:
commit
8fc4f4b70c
83
CHANGELOG.md
Normal file
83
CHANGELOG.md
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## 0.3.9 - 2014-11-09
|
||||||
|
|
||||||
|
- PHP 5.6 improvements ([#482](https://github.com/phpseclib/phpseclib/pull/482), [#491](https://github.com/phpseclib/phpseclib/issues/491))
|
||||||
|
|
||||||
|
## 0.3.8 - 2014-09-12
|
||||||
|
|
||||||
|
- improve support for indef lengths in File_ASN1
|
||||||
|
- add hmac-sha2-256 support to Net_SSH2
|
||||||
|
- make it so negotiated algorithms can be seen before Net_SSH2 login
|
||||||
|
- add sha256-96 and sha512-96 to Crypt_Hash
|
||||||
|
- window size handling adjustments in Net_SSH2
|
||||||
|
|
||||||
|
## 0.3.7 - 2014-07-05
|
||||||
|
|
||||||
|
- auto-detect public vs private keys
|
||||||
|
- add file_exists, is_dir, is_file, readlink and symlink to Net_SFTP
|
||||||
|
- add support for recursive nlist and rawlist
|
||||||
|
- make it so nlist and rawlist can return pre-sorted output
|
||||||
|
- make it so callback functions can make exec() return early
|
||||||
|
- add signSPKAC and saveSPKAC methods to File_X509
|
||||||
|
- add support for PKCS8 keys in Crypt_RSA
|
||||||
|
- add pbkdf1 support to setPassword() in Crypt_Base
|
||||||
|
- add getWindowColumns, getWindowRows, setWindowColumns, setWindowRows to Net_SSH2
|
||||||
|
- add support for filenames with spaces in them to Net_SCP
|
||||||
|
|
||||||
|
## 0.3.6 - 2014-02-23
|
||||||
|
|
||||||
|
- add preliminary support for custom SSH subsystems
|
||||||
|
- add ssh-agent support
|
||||||
|
|
||||||
|
## 0.3.5 - 2013-07-11
|
||||||
|
|
||||||
|
- numerous SFTP changes:
|
||||||
|
- chown
|
||||||
|
- chgrp
|
||||||
|
- truncate
|
||||||
|
- improved file type detection
|
||||||
|
- put() can write to te middle of a file
|
||||||
|
- mkdir accepts the same paramters that PHP's mkdir does
|
||||||
|
- the ability to upload/download 2GB files
|
||||||
|
- across-the-board speedups for the various encryption algorithms
|
||||||
|
- multi-factor authentication support for Net_SSH2
|
||||||
|
- a $callback parameter for Net_SSH2::exec
|
||||||
|
- new classes:
|
||||||
|
- Net_SFTP_StreamWrapper
|
||||||
|
- Net_SCP
|
||||||
|
- Crypt_Twofish
|
||||||
|
- Crypt_Blowfish
|
||||||
|
|
||||||
|
## 0.3.1 - 2012-11-20
|
||||||
|
|
||||||
|
- add Net_SSH2::enableQuietMode() for suppressing stderr
|
||||||
|
- add Crypt_RSA::__toString() and Crypt_RSA::getSize()
|
||||||
|
- fix problems with File_X509::validateDate(), File_X509::sign() and Crypt_RSA::verify()
|
||||||
|
- use OpenSSL to speed up modular exponention in Math_BigInteger
|
||||||
|
- improved timeout functionality in Net_SSH2
|
||||||
|
- add support for SFTPv2
|
||||||
|
- add support for CRLs in File_X509
|
||||||
|
- SSH-2.0-SSH doesn't implement hmac-*-96 correctly
|
||||||
|
|
||||||
|
## 0.3.0 - 2012-07-08
|
||||||
|
|
||||||
|
- add support for reuming Net_SFTP::put()
|
||||||
|
- add support for recursive deletes and recursive chmods to Net_SFTP
|
||||||
|
- add setTimeout() to Net_SSH2
|
||||||
|
- add support for PBKDF2 to the various Crypt_* classes via setPassword()
|
||||||
|
- add File_X509 and File_ASN1
|
||||||
|
- add the ability to decode various formats in Crypt_RSA
|
||||||
|
- make Net_SSH2::getServerPublicHostKey() return a printer-friendly version of the public key
|
||||||
|
|
||||||
|
## 0.2.2 - 2011-05-09
|
||||||
|
|
||||||
|
- CFB and OFB modes were added to all block ciphers
|
||||||
|
- support for interactive mode was added to Net_SSH2
|
||||||
|
- Net_SSH2 now has limited keyboard_interactive authentication support
|
||||||
|
- support was added for PuTTY formatted RSA private keys and XML formatted RSA private keys
|
||||||
|
- Crypt_RSA::loadKey() will now try all key types automatically
|
||||||
|
= add support for AES-128-CBC and DES-EDE3-CFB encrypted RSA private keys
|
||||||
|
- add Net_SFTP::stat(), Net_SFTP::lstat() and Net_SFTP::rawlist()
|
||||||
|
- logging was added to Net_SSH1
|
||||||
|
- the license was changed to the less restrictive MIT license
|
@ -6,7 +6,7 @@ MIT-licensed pure-PHP implementations of an arbitrary-precision integer
|
|||||||
arithmetic library, fully PKCS#1 (v2.1) compliant RSA, DES, 3DES, RC4, Rijndael,
|
arithmetic library, fully PKCS#1 (v2.1) compliant RSA, DES, 3DES, RC4, Rijndael,
|
||||||
AES, Blowfish, Twofish, SSH-1, SSH-2, SFTP, and X.509
|
AES, Blowfish, Twofish, SSH-1, SSH-2, SFTP, and X.509
|
||||||
|
|
||||||
* [Download (0.3.8)](http://sourceforge.net/projects/phpseclib/files/phpseclib0.3.8.zip/download)
|
* [Download (0.3.9)](http://sourceforge.net/projects/phpseclib/files/phpseclib0.3.9.zip/download)
|
||||||
* [Browse Git](https://github.com/phpseclib/phpseclib)
|
* [Browse Git](https://github.com/phpseclib/phpseclib)
|
||||||
* [Code Coverage Report](http://phpseclib.bantux.org/code_coverage/master/latest/)
|
* [Code Coverage Report](http://phpseclib.bantux.org/code_coverage/master/latest/)
|
||||||
|
|
||||||
|
@ -915,7 +915,7 @@ class Math_BigInteger
|
|||||||
$value = $x_value;
|
$value = $x_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
$value[] = 0; // just in case the carry adds an extra digit
|
$value[count($value)] = 0; // just in case the carry adds an extra digit
|
||||||
|
|
||||||
$carry = 0;
|
$carry = 0;
|
||||||
for ($i = 0, $j = 1; $j < $size; $i+=2, $j+=2) {
|
for ($i = 0, $j = 1; $j < $size; $i+=2, $j+=2) {
|
||||||
@ -2137,7 +2137,7 @@ class Math_BigInteger
|
|||||||
|
|
||||||
if ($this->_compare($result, false, $temp[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_SIGN]) < 0) {
|
if ($this->_compare($result, false, $temp[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_SIGN]) < 0) {
|
||||||
$corrector_value = $this->_array_repeat(0, $n_length + 1);
|
$corrector_value = $this->_array_repeat(0, $n_length + 1);
|
||||||
$corrector_value[] = 1;
|
$corrector_value[count($corrector_value)] = 1;
|
||||||
$result = $this->_add($result, false, $corrector_value, false);
|
$result = $this->_add($result, false, $corrector_value, false);
|
||||||
$result = $result[MATH_BIGINTEGER_VALUE];
|
$result = $result[MATH_BIGINTEGER_VALUE];
|
||||||
}
|
}
|
||||||
@ -3482,7 +3482,7 @@ class Math_BigInteger
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( $carry ) {
|
if ( $carry ) {
|
||||||
$this->value[] = $carry;
|
$this->value[count($this->value)] = $carry;
|
||||||
}
|
}
|
||||||
|
|
||||||
while ($num_digits--) {
|
while ($num_digits--) {
|
||||||
|
@ -2473,14 +2473,13 @@ class Net_SFTP extends Net_SSH2
|
|||||||
foreach ($this->attributes as $key => $value) {
|
foreach ($this->attributes as $key => $value) {
|
||||||
switch ($flags & $key) {
|
switch ($flags & $key) {
|
||||||
case NET_SFTP_ATTR_SIZE: // 0x00000001
|
case NET_SFTP_ATTR_SIZE: // 0x00000001
|
||||||
// size is represented by a 64-bit integer, so we perhaps ought to be doing the following:
|
// The size attribute is defined as an unsigned 64-bit integer.
|
||||||
// $attr['size'] = new Math_BigInteger($this->_string_shift($response, 8), 256);
|
// The following will use floats on 32-bit platforms, if necessary.
|
||||||
// of course, you shouldn't be using Net_SFTP to transfer files that are in excess of 4GB
|
// As can be seen in the BigInteger class, floats are generally
|
||||||
// (0xFFFFFFFF bytes), anyway. as such, we'll just represent all file sizes that are bigger than
|
// IEEE 754 binary64 "double precision" on such platforms and
|
||||||
// 4GB as being 4GB.
|
// as such can represent integers of at least 2^50 without loss
|
||||||
extract(unpack('Nupper/Nsize', $this->_string_shift($response, 8)));
|
// of precision. Interpreted in filesize, 2^50 bytes = 1024 TiB.
|
||||||
$attr['size'] = $upper ? 4294967296 * $upper : 0;
|
$attr['size'] = hexdec(bin2hex($this->_string_shift($response, 8)));
|
||||||
$attr['size']+= $size < 0 ? ($size & 0x7FFFFFFF) + 0x80000000 : $size;
|
|
||||||
break;
|
break;
|
||||||
case NET_SFTP_ATTR_UIDGID: // 0x00000002 (SFTPv3 only)
|
case NET_SFTP_ATTR_UIDGID: // 0x00000002 (SFTPv3 only)
|
||||||
$attr+= unpack('Nuid/Ngid', $this->_string_shift($response, 8));
|
$attr+= unpack('Nuid/Ngid', $this->_string_shift($response, 8));
|
||||||
|
@ -77,7 +77,7 @@ define('NET_SSH2_MASK_CONNECTED', 0x00000002);
|
|||||||
define('NET_SSH2_MASK_LOGIN_REQ', 0x00000004);
|
define('NET_SSH2_MASK_LOGIN_REQ', 0x00000004);
|
||||||
define('NET_SSH2_MASK_LOGIN', 0x00000008);
|
define('NET_SSH2_MASK_LOGIN', 0x00000008);
|
||||||
define('NET_SSH2_MASK_SHELL', 0x00000010);
|
define('NET_SSH2_MASK_SHELL', 0x00000010);
|
||||||
define('NET_SSH2_MASK_WINDOW_ADJUST', 0X00000020);
|
define('NET_SSH2_MASK_WINDOW_ADJUST', 0x00000020);
|
||||||
/**#@-*/
|
/**#@-*/
|
||||||
|
|
||||||
/**#@+
|
/**#@+
|
||||||
@ -2296,7 +2296,7 @@ class Net_SSH2
|
|||||||
/**
|
/**
|
||||||
* Execute Command
|
* Execute Command
|
||||||
*
|
*
|
||||||
* If $block is set to false then Net_SSH2::_get_channel_packet(NET_SSH2_CHANNEL_EXEC) will need to be called manually.
|
* If $callback is set to false then Net_SSH2::_get_channel_packet(NET_SSH2_CHANNEL_EXEC) will need to be called manually.
|
||||||
* In all likelihood, this is not a feature you want to be taking advantage of.
|
* In all likelihood, this is not a feature you want to be taking advantage of.
|
||||||
*
|
*
|
||||||
* @param String $command
|
* @param String $command
|
||||||
@ -3804,8 +3804,9 @@ class Net_SSH2
|
|||||||
$e = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
|
$e = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
|
||||||
|
|
||||||
$temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
|
$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);
|
$rawN = $this->_string_shift($server_public_host_key, $temp['length']);
|
||||||
$nLength = $temp['length'];
|
$n = new Math_BigInteger($rawN, -256);
|
||||||
|
$nLength = strlen(ltrim($rawN, "\0"));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
$temp = unpack('Nlength', $this->_string_shift($signature, 4));
|
$temp = unpack('Nlength', $this->_string_shift($signature, 4));
|
||||||
@ -3842,7 +3843,7 @@ class Net_SSH2
|
|||||||
$s = $s->toBytes();
|
$s = $s->toBytes();
|
||||||
|
|
||||||
$h = pack('N4H*', 0x00302130, 0x0906052B, 0x0E03021A, 0x05000414, sha1($this->exchange_hash));
|
$h = pack('N4H*', 0x00302130, 0x0906052B, 0x0E03021A, 0x05000414, sha1($this->exchange_hash));
|
||||||
$h = chr(0x01) . str_repeat(chr(0xFF), $nLength - 3 - strlen($h)) . $h;
|
$h = chr(0x01) . str_repeat(chr(0xFF), $nLength - 2 - strlen($h)) . $h;
|
||||||
|
|
||||||
if ($s != $h) {
|
if ($s != $h) {
|
||||||
user_error('Bad server signature');
|
user_error('Bad server signature');
|
||||||
|
@ -431,6 +431,20 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
|
|||||||
/**
|
/**
|
||||||
* @depends testFileExistsIsFileIsDirDir
|
* @depends testFileExistsIsFileIsDirDir
|
||||||
*/
|
*/
|
||||||
|
public function testTruncateLargeFile($sftp)
|
||||||
|
{
|
||||||
|
$filesize = (4 * 1024 + 16) * 1024 * 1024;
|
||||||
|
$filename = 'file-large-from-truncate-4112MiB.txt';
|
||||||
|
$this->assertTrue($sftp->touch($filename));
|
||||||
|
$this->assertTrue($sftp->truncate($filename, $filesize));
|
||||||
|
$this->assertSame($filesize, $sftp->size($filename));
|
||||||
|
|
||||||
|
return $sftp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @depends testTruncateLargeFile
|
||||||
|
*/
|
||||||
public function testRmDirScratch($sftp)
|
public function testRmDirScratch($sftp)
|
||||||
{
|
{
|
||||||
$this->assertFalse(
|
$this->assertFalse(
|
||||||
|
Loading…
Reference in New Issue
Block a user