Namespaced classes

This commit is contained in:
Clint Nelissen 2014-12-15 09:25:46 -08:00
parent 16503848a4
commit fddf20f89c
4 changed files with 35 additions and 67 deletions

View File

@ -52,45 +52,6 @@ use \phpseclib\Crypt\Random;
// Used to do Diffie-Hellman key exchange and DSA/RSA signature verification.
use \phpseclib\Math\BigInteger;
/**#@+
* Execution Bitmap Masks
*
* @see Net_SSH2::bitmap
* @access private
*/
define('NET_SSH2_MASK_CONSTRUCTOR', 0x00000001);
define('NET_SSH2_MASK_CONNECTED', 0x00000002);
define('NET_SSH2_MASK_LOGIN_REQ', 0x00000004);
define('NET_SSH2_MASK_LOGIN', 0x00000008);
define('NET_SSH2_MASK_SHELL', 0x00000010);
define('NET_SSH2_MASK_WINDOW_ADJUST', 0x00000020);
/**#@-*/
/**#@+
* Channel constants
*
* RFC4254 refers not to client and server channels but rather to sender and recipient channels. we don't refer
* to them in that way because RFC4254 toggles the meaning. the client sends a SSH_MSG_CHANNEL_OPEN message with
* a sender channel and the server sends a SSH_MSG_CHANNEL_OPEN_CONFIRMATION in response, with a sender and a
* recepient channel. at first glance, you might conclude that SSH_MSG_CHANNEL_OPEN_CONFIRMATION's sender channel
* would be the same thing as SSH_MSG_CHANNEL_OPEN's sender channel, but it's not, per this snipet:
* The 'recipient channel' is the channel number given in the original
* open request, and 'sender channel' is the channel number allocated by
* the other side.
*
* @see Net_SSH2::_send_channel_packet()
* @see Net_SSH2::_get_channel_packet()
* @access private
*/
define('NET_SSH2_CHANNEL_EXEC', 0); // PuTTy uses 0x100
define('NET_SSH2_CHANNEL_SHELL', 1);
define('NET_SSH2_CHANNEL_SUBSYSTEM', 2);
/**#@-*/
/**#@+
* @access public
* @see Net_SSH2::getLog()
*/
/**
* Pure-PHP implementation of SSHv2.
*
@ -1896,10 +1857,10 @@ class Net_SSH2
// although PHP5's get_class() preserves the case, PHP4's does not
if (is_object($password)) {
switch (strtolower(get_class($password))) {
case 'crypt_rsa':
switch (get_class($password)) {
case 'Crypt_RSA':
return $this->_privatekey_login($username, $password);
case 'system_ssh_agent':
case 'phpseclib\System\SSH\Agent':
return $this->_ssh_agent_login($username, $password);
}
}
@ -2141,7 +2102,7 @@ class Net_SSH2
* Login with an ssh-agent provided key
*
* @param String $username
* @param System_SSH_Agent $agent
* @param \phpseclib\System\SSH\Agent $agent
* @return Boolean
* @access private
*/

View File

@ -10,7 +10,7 @@
* include 'System/SSH/Agent.php';
* include 'Net/SSH2.php';
*
* $agent = new System_SSH_Agent();
* $agent = new \phpseclib\System\SSH\Agent();
*
* $ssh = new Net_SSH2('www.domain.tld');
* if (!$ssh->login('username', $agent)) {
@ -23,7 +23,7 @@
* </code>
*
* @category System
* @package System_SSH_Agent
* @package SSH\Agent
* @author Jim Wigginton <terrafrost@php.net>
* @copyright 2014 Jim Wigginton
* @license http://www.opensource.org/licenses/mit-license.html MIT License
@ -31,20 +31,21 @@
* @internal See http://api.libssh.org/rfc/PROTOCOL.agent
*/
if (!class_exists('System_SSH_Agent_Identity')) {
include_once 'Agent/Identity.php';
}
namespace phpseclib\System\SSH;
use Crypt_RSA; //This should be removed once the Crypt package is fully namespaced
use phpseclib\System\SSH\Agent\Identity;
/**
* Pure-PHP ssh-agent client identity factory
*
* requestIdentities() method pumps out System_SSH_Agent_Identity objects
* requestIdentities() method pumps out \phpseclib\System\SSH\Agent\Identity objects
*
* @package System_SSH_Agent
* @package SSH\Agent
* @author Jim Wigginton <terrafrost@php.net>
* @access internal
*/
class System_SSH_Agent
class Agent
{
/**#@+
* Message numbers
@ -77,7 +78,7 @@ class System_SSH_Agent
/**
* Default Constructor
*
* @return System_SSH_Agent
* @return \phpseclib\System\SSH\Agent
* @access public
*/
function __construct()
@ -104,7 +105,7 @@ class System_SSH_Agent
* Request Identities
*
* See "2.5.2 Requesting a list of protocol 2 keys"
* Returns an array containing zero or more System_SSH_Agent_Identity objects
* Returns an array containing zero or more \phpseclib\System\SSH\Agent\Identity objects
*
* @return Array
* @access public
@ -149,7 +150,7 @@ class System_SSH_Agent
}
// resources are passed by reference by default
if (isset($key)) {
$identity = new System_SSH_Agent_Identity($this->fsock);
$identity = new Identity($this->fsock);
$identity->setPublicKey($key);
$identity->setPublicKeyBlob($key_blob);
$identities[] = $identity;

View File

@ -5,7 +5,7 @@
* PHP versions 4 and 5
*
* @category System
* @package System_SSH_Agent
* @package SSH\Agent
* @author Jim Wigginton <terrafrost@php.net>
* @copyright 2009 Jim Wigginton
* @license http://www.opensource.org/licenses/mit-license.html MIT License
@ -13,28 +13,32 @@
* @internal See http://api.libssh.org/rfc/PROTOCOL.agent
*/
namespace phpseclib\System\SSH\Agent;
use phpseclib\System\SSH\Agent;
/**
* Pure-PHP ssh-agent client identity object
*
* Instantiation should only be performed by System_SSH_Agent class.
* Instantiation should only be performed by \phpseclib\System\SSH\Agent class.
* This could be thought of as implementing an interface that Crypt_RSA
* implements. ie. maybe a Net_SSH_Auth_PublicKey interface or something.
* The methods in this interface would be getPublicKey, setSignatureMode
* and sign since those are the methods phpseclib looks for to perform
* public key authentication.
*
* @package System_SSH_Agent
* @package SSH\Agent
* @author Jim Wigginton <terrafrost@php.net>
* @access internal
*/
class System_SSH_Agent_Identity
class Identity
{
/**
* Key Object
*
* @var Crypt_RSA
* @access private
* @see System_SSH_Agent_Identity::getPublicKey()
* @see \phpseclib\System\SSH\Agent\Identity::getPublicKey()
*/
var $key;
@ -43,7 +47,7 @@ class System_SSH_Agent_Identity
*
* @var String
* @access private
* @see System_SSH_Agent_Identity::sign()
* @see \phpseclib\System\SSH\Agent\Identity::sign()
*/
var $key_blob;
@ -52,7 +56,7 @@ class System_SSH_Agent_Identity
*
* @var Resource
* @access private
* @see System_SSH_Agent_Identity::sign()
* @see \phpseclib\System\SSH\Agent\Identity::sign()
*/
var $fsock;
@ -60,7 +64,7 @@ class System_SSH_Agent_Identity
* Default Constructor.
*
* @param Resource $fsock
* @return System_SSH_Agent_Identity
* @return \phpseclib\System\SSH\Agent\Identity
* @access private
*/
function __construct($fsock)
@ -71,7 +75,7 @@ class System_SSH_Agent_Identity
/**
* Set Public Key
*
* Called by System_SSH_Agent::requestIdentities()
* Called by \phpseclib\System\SSH\Agent::requestIdentities()
*
* @param Crypt_RSA $key
* @access private
@ -85,7 +89,7 @@ class System_SSH_Agent_Identity
/**
* Set Public Key
*
* Called by System_SSH_Agent::requestIdentities(). The key blob could be extracted from $this->key
* Called by \phpseclib\System\SSH\Agent::requestIdentities(). The key blob could be extracted from $this->key
* but this saves a small amount of computation.
*
* @param String $key_blob
@ -135,7 +139,7 @@ class System_SSH_Agent_Identity
function sign($message)
{
// the last parameter (currently 0) is for flags and ssh-agent only defines one flag (for ssh-dss): SSH_AGENT_OLD_SIGNATURE
$packet = pack('CNa*Na*N', System_SSH_Agent::SSH_AGENTC_SIGN_REQUEST, strlen($this->key_blob), $this->key_blob, strlen($message), $message, 0);
$packet = pack('CNa*Na*N', Agent::SSH_AGENTC_SIGN_REQUEST, strlen($this->key_blob), $this->key_blob, strlen($message), $message, 0);
$packet = pack('Na*', strlen($packet), $packet);
if (strlen($packet) != fputs($this->fsock, $packet)) {
user_error('Connection closed during signing');
@ -143,7 +147,7 @@ class System_SSH_Agent_Identity
$length = current(unpack('N', fread($this->fsock, 4)));
$type = ord(fread($this->fsock, 1));
if ($type != System_SSH_Agent::SSH_AGENT_SIGN_RESPONSE) {
if ($type != Agent::SSH_AGENT_SIGN_RESPONSE) {
user_error('Unable to retreive signature');
}

View File

@ -6,6 +6,8 @@
* @license http://www.opensource.org/licenses/mit-license.html MIT License
*/
use phpseclib\System\SSH\Agent;
class Functional_Net_SSH2AgentTest extends PhpseclibFunctionalTestCase
{
public static function setUpBeforeClass()
@ -21,7 +23,7 @@ class Functional_Net_SSH2AgentTest extends PhpseclibFunctionalTestCase
public function testAgentLogin()
{
$ssh = new Net_SSH2($this->getEnv('SSH_HOSTNAME'));
$agent = new System_SSH_Agent;
$agent = new Agent;
$this->assertTrue(
$ssh->login($this->getEnv('SSH_USERNAME'), $agent),