1
0
mirror of https://github.com/danog/phpseclib.git synced 2024-12-12 09:09:39 +01:00

CFB didn't always work in continuous mode

This commit is contained in:
terrafrost 2013-01-04 20:53:23 -06:00
parent 61ad80fd64
commit c1244dd339
3 changed files with 12 additions and 6 deletions

View File

@ -777,12 +777,14 @@ class Crypt_DES {
if (strlen($buffer['ciphertext'])) { if (strlen($buffer['ciphertext'])) {
$plaintext = $ciphertext ^ substr($this->decryptIV, strlen($buffer['ciphertext'])); $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($buffer['ciphertext']));
$buffer['ciphertext'].= substr($ciphertext, 0, strlen($plaintext)); $buffer['ciphertext'].= substr($ciphertext, 0, strlen($plaintext));
if (strlen($buffer['ciphertext']) == 8) { if (strlen($buffer['ciphertext']) != 8) {
$block = $this->decryptIV;
} else {
$block = $buffer['ciphertext'];
$xor = $this->_processBlock($buffer['ciphertext'], CRYPT_DES_ENCRYPT); $xor = $this->_processBlock($buffer['ciphertext'], CRYPT_DES_ENCRYPT);
$buffer['ciphertext'] = ''; $buffer['ciphertext'] = '';
} }
$start = strlen($plaintext); $start = strlen($plaintext);
$block = $this->decryptIV;
} else { } else {
$plaintext = ''; $plaintext = '';
$xor = $this->_processBlock($this->decryptIV, CRYPT_DES_ENCRYPT); $xor = $this->_processBlock($this->decryptIV, CRYPT_DES_ENCRYPT);

View File

@ -887,12 +887,14 @@ class Crypt_Rijndael {
if (strlen($buffer['ciphertext'])) { if (strlen($buffer['ciphertext'])) {
$plaintext = $ciphertext ^ substr($this->decryptIV, strlen($buffer['ciphertext'])); $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($buffer['ciphertext']));
$buffer['ciphertext'].= substr($ciphertext, 0, strlen($plaintext)); $buffer['ciphertext'].= substr($ciphertext, 0, strlen($plaintext));
if (strlen($buffer['ciphertext']) == $block_size) { if (strlen($buffer['ciphertext']) != $block_size) {
$block = $this->decryptIV;
} else {
$block = $buffer['ciphertext'];
$xor = $this->_encryptBlock($buffer['ciphertext']); $xor = $this->_encryptBlock($buffer['ciphertext']);
$buffer['ciphertext'] = ''; $buffer['ciphertext'] = '';
} }
$start = strlen($plaintext); $start = strlen($plaintext);
$block = $this->decryptIV;
} else { } else {
$plaintext = ''; $plaintext = '';
$xor = $this->_encryptBlock($this->decryptIV); $xor = $this->_encryptBlock($this->decryptIV);

View File

@ -825,14 +825,16 @@ class Crypt_TripleDES {
if (strlen($buffer['ciphertext'])) { if (strlen($buffer['ciphertext'])) {
$plaintext = $ciphertext ^ substr($this->decryptIV, strlen($buffer['ciphertext'])); $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($buffer['ciphertext']));
$buffer['ciphertext'].= substr($ciphertext, 0, strlen($plaintext)); $buffer['ciphertext'].= substr($ciphertext, 0, strlen($plaintext));
if (strlen($buffer['ciphertext']) == 8) { if (strlen($buffer['ciphertext']) != 8) {
$block = $this->decryptIV;
} else {
$block = $buffer['ciphertext'];
$xor = $des[0]->_processBlock($buffer['ciphertext'], CRYPT_DES_ENCRYPT); $xor = $des[0]->_processBlock($buffer['ciphertext'], CRYPT_DES_ENCRYPT);
$xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT); $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT);
$xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT); $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT);
$buffer['ciphertext'] = ''; $buffer['ciphertext'] = '';
} }
$start = strlen($plaintext); $start = strlen($plaintext);
$block = $this->decryptIV;
} else { } else {
$plaintext = ''; $plaintext = '';
$xor = $des[0]->_processBlock($this->decryptIV, CRYPT_DES_ENCRYPT); $xor = $des[0]->_processBlock($this->decryptIV, CRYPT_DES_ENCRYPT);