mirror of
https://github.com/phpseclib/phpseclib.git
synced 2025-01-28 01:28:27 +00:00
Merge branch '2.0' into 3.0
This commit is contained in:
commit
1017120fa9
@ -101,7 +101,15 @@ abstract class SymmetricKey
|
|||||||
* @see \phpseclib3\Crypt\Common\SymmetricKey::encrypt()
|
* @see \phpseclib3\Crypt\Common\SymmetricKey::encrypt()
|
||||||
* @see \phpseclib3\Crypt\Common\SymmetricKey::decrypt()
|
* @see \phpseclib3\Crypt\Common\SymmetricKey::decrypt()
|
||||||
*/
|
*/
|
||||||
const MODE_CFB8 = 38;
|
const MODE_CFB8 = 6;
|
||||||
|
/**
|
||||||
|
* Encrypt / decrypt using the Output Feedback mode (8bit)
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @see \phpseclib3\Crypt\Common\SymmetricKey::encrypt()
|
||||||
|
* @see \phpseclib3\Crypt\Common\SymmetricKey::decrypt()
|
||||||
|
*/
|
||||||
|
const MODE_OFB8 = 7;
|
||||||
/**
|
/**
|
||||||
* Encrypt / decrypt using the Output Feedback mode.
|
* Encrypt / decrypt using the Output Feedback mode.
|
||||||
*
|
*
|
||||||
@ -142,6 +150,7 @@ abstract class SymmetricKey
|
|||||||
'cfb' => self::MODE_CFB,
|
'cfb' => self::MODE_CFB,
|
||||||
'cfb8' => self::MODE_CFB8,
|
'cfb8' => self::MODE_CFB8,
|
||||||
'ofb' => self::MODE_OFB,
|
'ofb' => self::MODE_OFB,
|
||||||
|
'ofb8' => self::MODE_OFB8,
|
||||||
'gcm' => self::MODE_GCM,
|
'gcm' => self::MODE_GCM,
|
||||||
'stream' => self::MODE_STREAM
|
'stream' => self::MODE_STREAM
|
||||||
];
|
];
|
||||||
@ -642,6 +651,8 @@ abstract class SymmetricKey
|
|||||||
*
|
*
|
||||||
* - ofb
|
* - ofb
|
||||||
*
|
*
|
||||||
|
* - ofb8
|
||||||
|
*
|
||||||
* - gcm
|
* - gcm
|
||||||
*
|
*
|
||||||
* @param string $mode
|
* @param string $mode
|
||||||
@ -669,6 +680,7 @@ abstract class SymmetricKey
|
|||||||
case self::MODE_CFB:
|
case self::MODE_CFB:
|
||||||
case self::MODE_CFB8:
|
case self::MODE_CFB8:
|
||||||
case self::MODE_OFB:
|
case self::MODE_OFB:
|
||||||
|
case self::MODE_OFB8:
|
||||||
case self::MODE_STREAM:
|
case self::MODE_STREAM:
|
||||||
$this->paddable = false;
|
$this->paddable = false;
|
||||||
break;
|
break;
|
||||||
@ -1237,6 +1249,21 @@ abstract class SymmetricKey
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $ciphertext;
|
return $ciphertext;
|
||||||
|
case self::MODE_OFB8:
|
||||||
|
$ciphertext = '';
|
||||||
|
$len = strlen($plaintext);
|
||||||
|
$iv = $this->encryptIV;
|
||||||
|
|
||||||
|
for ($i = 0; $i < $len; ++$i) {
|
||||||
|
$xor = openssl_encrypt($iv, $this->cipher_name_openssl_ecb, $this->key, $this->openssl_options, $this->decryptIV);
|
||||||
|
$ciphertext.= $plaintext[$i] ^ $xor;
|
||||||
|
$iv = substr($iv, 1) . $xor[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->continuousBuffer) {
|
||||||
|
$this->encryptIV = $iv;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case self::MODE_OFB:
|
case self::MODE_OFB:
|
||||||
return $this->openssl_ofb_process($plaintext, $this->encryptIV, $this->enbuffer);
|
return $this->openssl_ofb_process($plaintext, $this->encryptIV, $this->enbuffer);
|
||||||
}
|
}
|
||||||
@ -1431,6 +1458,21 @@ abstract class SymmetricKey
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case self::MODE_OFB8:
|
||||||
|
$ciphertext = '';
|
||||||
|
$len = strlen($plaintext);
|
||||||
|
$iv = $this->encryptIV;
|
||||||
|
|
||||||
|
for ($i = 0; $i < $len; ++$i) {
|
||||||
|
$xor = $this->encryptBlock($iv);
|
||||||
|
$ciphertext.= $plaintext[$i] ^ $xor;
|
||||||
|
$iv = substr($iv, 1) . $xor[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->continuousBuffer) {
|
||||||
|
$this->encryptIV = $iv;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case self::MODE_OFB:
|
case self::MODE_OFB:
|
||||||
$xor = $this->encryptIV;
|
$xor = $this->encryptIV;
|
||||||
if (strlen($buffer['xor'])) {
|
if (strlen($buffer['xor'])) {
|
||||||
@ -1595,6 +1637,21 @@ abstract class SymmetricKey
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case self::MODE_OFB8:
|
||||||
|
$plaintext = '';
|
||||||
|
$len = strlen($ciphertext);
|
||||||
|
$iv = $this->decryptIV;
|
||||||
|
|
||||||
|
for ($i = 0; $i < $len; ++$i) {
|
||||||
|
$xor = openssl_encrypt($iv, $this->cipher_name_openssl_ecb, $this->key, $this->openssl_options, $this->decryptIV);
|
||||||
|
$plaintext.= $ciphertext[$i] ^ $xor;
|
||||||
|
$iv = substr($iv, 1) . $xor[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->continuousBuffer) {
|
||||||
|
$this->decryptIV = $iv;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case self::MODE_OFB:
|
case self::MODE_OFB:
|
||||||
$plaintext = $this->openssl_ofb_process($ciphertext, $this->decryptIV, $this->debuffer);
|
$plaintext = $this->openssl_ofb_process($ciphertext, $this->decryptIV, $this->debuffer);
|
||||||
}
|
}
|
||||||
@ -1773,6 +1830,21 @@ abstract class SymmetricKey
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case self::MODE_OFB8:
|
||||||
|
$plaintext = '';
|
||||||
|
$len = strlen($ciphertext);
|
||||||
|
$iv = $this->decryptIV;
|
||||||
|
|
||||||
|
for ($i = 0; $i < $len; ++$i) {
|
||||||
|
$xor = $this->encryptBlock($iv);
|
||||||
|
$plaintext.= $ciphertext[$i] ^ $xor;
|
||||||
|
$iv = substr($iv, 1) . $xor[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->continuousBuffer) {
|
||||||
|
$this->decryptIV = $iv;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case self::MODE_OFB:
|
case self::MODE_OFB:
|
||||||
$xor = $this->decryptIV;
|
$xor = $this->decryptIV;
|
||||||
if (strlen($buffer['xor'])) {
|
if (strlen($buffer['xor'])) {
|
||||||
@ -2446,6 +2518,7 @@ abstract class SymmetricKey
|
|||||||
self::MODE_CFB => 'ncfb',
|
self::MODE_CFB => 'ncfb',
|
||||||
self::MODE_CFB8 => MCRYPT_MODE_CFB,
|
self::MODE_CFB8 => MCRYPT_MODE_CFB,
|
||||||
self::MODE_OFB => MCRYPT_MODE_NOFB,
|
self::MODE_OFB => MCRYPT_MODE_NOFB,
|
||||||
|
self::MODE_OFB8 => MCRYPT_MODE_OFB,
|
||||||
self::MODE_STREAM => MCRYPT_MODE_STREAM,
|
self::MODE_STREAM => MCRYPT_MODE_STREAM,
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -2974,6 +3047,44 @@ abstract class SymmetricKey
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $_plaintext;
|
||||||
|
';
|
||||||
|
break;
|
||||||
|
case self::MODE_OFB8:
|
||||||
|
$encrypt = $init_encrypt . '
|
||||||
|
$_ciphertext = "";
|
||||||
|
$_len = strlen($_text);
|
||||||
|
$_iv = $self->encryptIV;
|
||||||
|
|
||||||
|
for ($_i = 0; $_i < $_len; ++$_i) {
|
||||||
|
$in = $_iv;
|
||||||
|
'.$encrypt_block.'
|
||||||
|
$_ciphertext.= $_text[$_i] ^ $in;
|
||||||
|
$_iv = substr($_iv, 1) . $in[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($self->continuousBuffer) {
|
||||||
|
$self->encryptIV = $_iv;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $_ciphertext;
|
||||||
|
';
|
||||||
|
$decrypt = $init_encrypt . '
|
||||||
|
$_plaintext = "";
|
||||||
|
$_len = strlen($_text);
|
||||||
|
$_iv = $self->decryptIV;
|
||||||
|
|
||||||
|
for ($_i = 0; $_i < $_len; ++$_i) {
|
||||||
|
$in = $_iv;
|
||||||
|
'.$encrypt_block.'
|
||||||
|
$_plaintext.= $_text[$_i] ^ $in;
|
||||||
|
$_iv = substr($_iv, 1) . $in[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($self->continuousBuffer) {
|
||||||
|
$self->decryptIV = $_iv;
|
||||||
|
}
|
||||||
|
|
||||||
return $_plaintext;
|
return $_plaintext;
|
||||||
';
|
';
|
||||||
break;
|
break;
|
||||||
|
@ -33,7 +33,8 @@ abstract class Unit_Crypt_AES_TestCase extends PhpseclibTestCase
|
|||||||
'ctr',
|
'ctr',
|
||||||
'ofb',
|
'ofb',
|
||||||
'cfb',
|
'cfb',
|
||||||
'cfb8'
|
'cfb8',
|
||||||
|
'ofb8',
|
||||||
];
|
];
|
||||||
$plaintexts = [
|
$plaintexts = [
|
||||||
'',
|
'',
|
||||||
@ -136,6 +137,7 @@ abstract class Unit_Crypt_AES_TestCase extends PhpseclibTestCase
|
|||||||
'ofb',
|
'ofb',
|
||||||
'cfb',
|
'cfb',
|
||||||
'cfb8',
|
'cfb8',
|
||||||
|
'ofb8',
|
||||||
];
|
];
|
||||||
|
|
||||||
$combos = [
|
$combos = [
|
||||||
|
Loading…
x
Reference in New Issue
Block a user