diff --git a/phpseclib/Net/SSH2.php b/phpseclib/Net/SSH2.php index 5011629d..fc49f0cb 100644 --- a/phpseclib/Net/SSH2.php +++ b/phpseclib/Net/SSH2.php @@ -112,6 +112,13 @@ if (!class_exists('Crypt_AES')) { require_once('Crypt/AES.php'); } +/** + * Include Crypt_Twofish + */ +if (!class_exists('Crypt_Twofish')) { + require_once('Crypt/Twofish.php'); +} + /**#@+ * Execution Bitmap Masks * @@ -966,24 +973,36 @@ class Net_SSH2 { ); static $encryption_algorithms = array( +/* // from : 'arcfour256', 'arcfour128', - 'arcfour', // OPTIONAL the ARCFOUR stream cipher with a 128-bit key + 'arcfour', // OPTIONAL the ARCFOUR stream cipher with a 128-bit key - 'aes128-cbc', // RECOMMENDED AES with a 128-bit key - 'aes192-cbc', // OPTIONAL AES with a 192-bit key - 'aes256-cbc', // OPTIONAL AES in CBC mode, with a 256-bit key + // CTR modes from : + 'aes128-ctr', // RECOMMENDED AES (Rijndael) in SDCTR mode, with 128-bit key + 'aes192-ctr', // RECOMMENDED AES with 192-bit key + 'aes256-ctr', // RECOMMENDED AES with 256-bit key - // from : - 'aes128-ctr', // RECOMMENDED AES (Rijndael) in SDCTR mode, with 128-bit key - 'aes192-ctr', // RECOMMENDED AES with 192-bit key - 'aes256-ctr', // RECOMMENDED AES with 256-bit key - '3des-ctr', // RECOMMENDED Three-key 3DES in SDCTR mode + 'twofish128-ctr', // OPTIONAL Twofish in SDCTR mode, with 128-bit key + 'twofish192-ctr', // OPTIONAL Twofish with 192-bit key + 'twofish256-ctr', // OPTIONAL Twofish with 256-bit key - '3des-cbc', // REQUIRED three-key 3DES in CBC mode - 'none' // OPTIONAL no encryption; NOT RECOMMENDED + 'aes128-cbc', // RECOMMENDED AES with a 128-bit key + 'aes192-cbc', // OPTIONAL AES with a 192-bit key + 'aes256-cbc', // OPTIONAL AES in CBC mode, with a 256-bit key +*/ + + 'twofish128-cbc', // OPTIONAL Twofish with a 128-bit key + 'twofish192-cbc', // OPTIONAL Twofish with a 192-bit key + 'twofish256-cbc', + 'twofish-cbc', // OPTIONAL alias for "twofish256-cbc" + // (this is being retained for historical reasons) + '3des-ctr', // RECOMMENDED Three-key 3DES in SDCTR mode + + '3des-cbc', // REQUIRED three-key 3DES in CBC mode + 'none' // OPTIONAL no encryption; NOT RECOMMENDED ); static $mac_algorithms = array( @@ -1092,14 +1111,21 @@ class Net_SSH2 { break; case 'aes256-cbc': case 'aes256-ctr': + case 'twofish-cbc': + case 'twofish256-cbc': + case 'twofish256-ctr': $decryptKeyLength = 32; // eg. 256 / 8 break; case 'aes192-cbc': case 'aes192-ctr': + case 'twofish192-cbc': + case 'twofish192-ctr': $decryptKeyLength = 24; // eg. 192 / 8 break; case 'aes128-cbc': case 'aes128-ctr': + case 'twofish128-cbc': + case 'twofish128-ctr': $decryptKeyLength = 16; // eg. 128 / 8 break; case 'arcfour': @@ -1123,14 +1149,21 @@ class Net_SSH2 { switch ($encrypt) { case '3des-cbc': case '3des-ctr': + case 'twofish-cbc': + case 'twofish256-cbc': + case 'twofish256-ctr': $encryptKeyLength = 24; break; case 'aes256-cbc': case 'aes256-ctr': + case 'twofish192-cbc': + case 'twofish192-ctr': $encryptKeyLength = 32; break; case 'aes192-cbc': case 'aes192-ctr': + case 'twofish128-cbc': + case 'twofish128-ctr': $encryptKeyLength = 24; break; case 'aes128-cbc': @@ -1307,6 +1340,19 @@ class Net_SSH2 { $this->encrypt = new Crypt_AES(CRYPT_AES_MODE_CTR); $this->encrypt_block_size = 16; // eg. 128 / 8 break; + case 'twofish128-cbc': + case 'twofish192-cbc': + case 'twofish256-cbc': + case 'twofish-cbc': + $this->encrypt = new Crypt_Twofish(); + $this->decrypt_block_size = 16; + break; + case 'twofish128-ctr': + case 'twofish192-ctr': + case 'twofish256-ctr': + $this->encrypt = new Crypt_Twofish(CRYPT_TWOFISH_MODE_CTR); + $this->decrypt_block_size = 16; + break; case 'arcfour': case 'arcfour128': case 'arcfour256': @@ -1335,6 +1381,19 @@ class Net_SSH2 { $this->decrypt = new Crypt_AES(CRYPT_AES_MODE_CTR); $this->decrypt_block_size = 16; break; + case 'twofish128-cbc': + case 'twofish192-cbc': + case 'twofish256-cbc': + case 'twofish-cbc': + $this->decrypt = new Crypt_Twofish(); + $this->decrypt_block_size = 16; + break; + case 'twofish128-ctr': + case 'twofish192-ctr': + case 'twofish256-ctr': + $this->decrypt = new Crypt_Twofish(CRYPT_TWOFISH_MODE_CTR); + $this->decrypt_block_size = 16; + break; case 'arcfour': case 'arcfour128': case 'arcfour256': @@ -3223,4 +3282,4 @@ class Net_SSH2 { } return $this->exit_status; } -} +} \ No newline at end of file