mirror of
https://github.com/phpseclib/phpseclib.git
synced 2024-11-16 10:15:14 +00:00
SSH2: add twofish support
This commit is contained in:
parent
3ac29adff1
commit
2c43e9151c
@ -112,6 +112,13 @@ if (!class_exists('Crypt_AES')) {
|
|||||||
require_once('Crypt/AES.php');
|
require_once('Crypt/AES.php');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Include Crypt_Twofish
|
||||||
|
*/
|
||||||
|
if (!class_exists('Crypt_Twofish')) {
|
||||||
|
require_once('Crypt/Twofish.php');
|
||||||
|
}
|
||||||
|
|
||||||
/**#@+
|
/**#@+
|
||||||
* Execution Bitmap Masks
|
* Execution Bitmap Masks
|
||||||
*
|
*
|
||||||
@ -966,20 +973,32 @@ class Net_SSH2 {
|
|||||||
);
|
);
|
||||||
|
|
||||||
static $encryption_algorithms = array(
|
static $encryption_algorithms = array(
|
||||||
|
/*
|
||||||
// from <http://tools.ietf.org/html/rfc4345#section-4>:
|
// from <http://tools.ietf.org/html/rfc4345#section-4>:
|
||||||
'arcfour256',
|
'arcfour256',
|
||||||
'arcfour128',
|
'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
|
// CTR modes from <http://tools.ietf.org/html/rfc4344#section-4>:
|
||||||
'aes192-cbc', // OPTIONAL AES with a 192-bit key
|
|
||||||
'aes256-cbc', // OPTIONAL AES in CBC mode, with a 256-bit key
|
|
||||||
|
|
||||||
// from <http://tools.ietf.org/html/rfc4344#section-4>:
|
|
||||||
'aes128-ctr', // RECOMMENDED AES (Rijndael) in SDCTR mode, with 128-bit key
|
'aes128-ctr', // RECOMMENDED AES (Rijndael) in SDCTR mode, with 128-bit key
|
||||||
'aes192-ctr', // RECOMMENDED AES with 192-bit key
|
'aes192-ctr', // RECOMMENDED AES with 192-bit key
|
||||||
'aes256-ctr', // RECOMMENDED AES with 256-bit key
|
'aes256-ctr', // RECOMMENDED AES with 256-bit key
|
||||||
|
|
||||||
|
'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
|
||||||
|
|
||||||
|
'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-ctr', // RECOMMENDED Three-key 3DES in SDCTR mode
|
||||||
|
|
||||||
'3des-cbc', // REQUIRED three-key 3DES in CBC mode
|
'3des-cbc', // REQUIRED three-key 3DES in CBC mode
|
||||||
@ -1092,14 +1111,21 @@ class Net_SSH2 {
|
|||||||
break;
|
break;
|
||||||
case 'aes256-cbc':
|
case 'aes256-cbc':
|
||||||
case 'aes256-ctr':
|
case 'aes256-ctr':
|
||||||
|
case 'twofish-cbc':
|
||||||
|
case 'twofish256-cbc':
|
||||||
|
case 'twofish256-ctr':
|
||||||
$decryptKeyLength = 32; // eg. 256 / 8
|
$decryptKeyLength = 32; // eg. 256 / 8
|
||||||
break;
|
break;
|
||||||
case 'aes192-cbc':
|
case 'aes192-cbc':
|
||||||
case 'aes192-ctr':
|
case 'aes192-ctr':
|
||||||
|
case 'twofish192-cbc':
|
||||||
|
case 'twofish192-ctr':
|
||||||
$decryptKeyLength = 24; // eg. 192 / 8
|
$decryptKeyLength = 24; // eg. 192 / 8
|
||||||
break;
|
break;
|
||||||
case 'aes128-cbc':
|
case 'aes128-cbc':
|
||||||
case 'aes128-ctr':
|
case 'aes128-ctr':
|
||||||
|
case 'twofish128-cbc':
|
||||||
|
case 'twofish128-ctr':
|
||||||
$decryptKeyLength = 16; // eg. 128 / 8
|
$decryptKeyLength = 16; // eg. 128 / 8
|
||||||
break;
|
break;
|
||||||
case 'arcfour':
|
case 'arcfour':
|
||||||
@ -1123,14 +1149,21 @@ class Net_SSH2 {
|
|||||||
switch ($encrypt) {
|
switch ($encrypt) {
|
||||||
case '3des-cbc':
|
case '3des-cbc':
|
||||||
case '3des-ctr':
|
case '3des-ctr':
|
||||||
|
case 'twofish-cbc':
|
||||||
|
case 'twofish256-cbc':
|
||||||
|
case 'twofish256-ctr':
|
||||||
$encryptKeyLength = 24;
|
$encryptKeyLength = 24;
|
||||||
break;
|
break;
|
||||||
case 'aes256-cbc':
|
case 'aes256-cbc':
|
||||||
case 'aes256-ctr':
|
case 'aes256-ctr':
|
||||||
|
case 'twofish192-cbc':
|
||||||
|
case 'twofish192-ctr':
|
||||||
$encryptKeyLength = 32;
|
$encryptKeyLength = 32;
|
||||||
break;
|
break;
|
||||||
case 'aes192-cbc':
|
case 'aes192-cbc':
|
||||||
case 'aes192-ctr':
|
case 'aes192-ctr':
|
||||||
|
case 'twofish128-cbc':
|
||||||
|
case 'twofish128-ctr':
|
||||||
$encryptKeyLength = 24;
|
$encryptKeyLength = 24;
|
||||||
break;
|
break;
|
||||||
case 'aes128-cbc':
|
case 'aes128-cbc':
|
||||||
@ -1307,6 +1340,19 @@ class Net_SSH2 {
|
|||||||
$this->encrypt = new Crypt_AES(CRYPT_AES_MODE_CTR);
|
$this->encrypt = new Crypt_AES(CRYPT_AES_MODE_CTR);
|
||||||
$this->encrypt_block_size = 16; // eg. 128 / 8
|
$this->encrypt_block_size = 16; // eg. 128 / 8
|
||||||
break;
|
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 'arcfour':
|
||||||
case 'arcfour128':
|
case 'arcfour128':
|
||||||
case 'arcfour256':
|
case 'arcfour256':
|
||||||
@ -1335,6 +1381,19 @@ class Net_SSH2 {
|
|||||||
$this->decrypt = new Crypt_AES(CRYPT_AES_MODE_CTR);
|
$this->decrypt = new Crypt_AES(CRYPT_AES_MODE_CTR);
|
||||||
$this->decrypt_block_size = 16;
|
$this->decrypt_block_size = 16;
|
||||||
break;
|
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 'arcfour':
|
||||||
case 'arcfour128':
|
case 'arcfour128':
|
||||||
case 'arcfour256':
|
case 'arcfour256':
|
||||||
|
Loading…
Reference in New Issue
Block a user