mirror of
https://github.com/danog/tgseclib.git
synced 2024-12-04 02:27:52 +01:00
d9e9504fba
* PSR2-1.0: Fix indentation phpcbf did not fix. Remove PSR2.Methods.FunctionCallSignature.SpaceAfterOpenBracket exception. Use phpcbf to fix PHP code to ruleset. Ignore coding guidelines in ANSI switch block. Base code sniffer ruleset on PSR2 rather than PEAR. Update PHP Code Sniffer to 2.3.3 Conflicts: build/code-sniffer-ruleset-tests.xml build/code-sniffer-ruleset.xml composer.lock phpseclib/Crypt/DES.php phpseclib/Crypt/Hash.php phpseclib/Crypt/RSA.php phpseclib/File/X509.php phpseclib/Math/BigInteger.php phpseclib/Net/SFTP.php phpseclib/Net/SSH1.php phpseclib/Net/SSH2.php tests/Functional/Net/SFTPUserStoryTest.php tests/Unit/Crypt/TwofishTest.php
129 lines
3.7 KiB
PHP
129 lines
3.7 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Pure-PHP implementation of AES.
|
|
*
|
|
* Uses mcrypt, if available/possible, and an internal implementation, otherwise.
|
|
*
|
|
* PHP version 5
|
|
*
|
|
* NOTE: Since AES.php is (for compatibility and phpseclib-historical reasons) virtually
|
|
* just a wrapper to Rijndael.php you may consider using Rijndael.php instead of
|
|
* to save one include_once().
|
|
*
|
|
* If {@link \phpseclib\Crypt\AES::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
|
|
* {@link \phpseclib\Crypt\AES::setKey() setKey()}. ie. if the key is 128-bits, the key length will be 128-bits. If it's 136-bits
|
|
* it'll be null-padded to 192-bits and 192 bits will be the key length until {@link \phpseclib\Crypt\AES::setKey() setKey()}
|
|
* is called, again, at which point, it'll be recalculated.
|
|
*
|
|
* Since \phpseclib\Crypt\AES extends \phpseclib\Crypt\Rijndael, some functions are available to be called that, in the context of AES, don't
|
|
* make a whole lot of sense. {@link \phpseclib\Crypt\AES::setBlockLength() setBlockLength()}, for instance. Calling that function,
|
|
* however possible, won't do anything (AES has a fixed block length whereas Rijndael has a variable one).
|
|
*
|
|
* Here's a short example of how to use this library:
|
|
* <code>
|
|
* <?php
|
|
* include 'vendor/autoload.php';
|
|
*
|
|
* $aes = new \phpseclib\Crypt\AES();
|
|
*
|
|
* $aes->setKey('abcdefghijklmnop');
|
|
*
|
|
* $size = 10 * 1024;
|
|
* $plaintext = '';
|
|
* for ($i = 0; $i < $size; $i++) {
|
|
* $plaintext.= 'a';
|
|
* }
|
|
*
|
|
* echo $aes->decrypt($aes->encrypt($plaintext));
|
|
* ?>
|
|
* </code>
|
|
*
|
|
* @category Crypt
|
|
* @package AES
|
|
* @author Jim Wigginton <terrafrost@php.net>
|
|
* @copyright 2008 Jim Wigginton
|
|
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
* @link http://phpseclib.sourceforge.net
|
|
*/
|
|
|
|
namespace phpseclib\Crypt;
|
|
|
|
use phpseclib\Crypt\Rijndael;
|
|
|
|
/**
|
|
* Pure-PHP implementation of AES.
|
|
*
|
|
* @package AES
|
|
* @author Jim Wigginton <terrafrost@php.net>
|
|
* @access public
|
|
*/
|
|
class AES extends Rijndael
|
|
{
|
|
/**
|
|
* Dummy function
|
|
*
|
|
* Since \phpseclib\Crypt\AES extends \phpseclib\Crypt\Rijndael, this function is, technically, available, but it doesn't do anything.
|
|
*
|
|
* @see \phpseclib\Crypt\Rijndael::setBlockLength()
|
|
* @access public
|
|
* @param Integer $length
|
|
*/
|
|
function setBlockLength($length)
|
|
{
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* Sets the key length
|
|
*
|
|
* Valid key lengths are 128, 192, and 256. If the length is less than 128, it will be rounded up to
|
|
* 128. If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount.
|
|
*
|
|
* @see \phpseclib\Crypt\Rijndael:setKeyLength()
|
|
* @access public
|
|
* @param Integer $length
|
|
*/
|
|
function setKeyLength($length)
|
|
{
|
|
switch ($length) {
|
|
case 160:
|
|
$length = 192;
|
|
break;
|
|
case 224:
|
|
$length = 256;
|
|
}
|
|
parent::setKeyLength($length);
|
|
}
|
|
|
|
/**
|
|
* Sets the key.
|
|
*
|
|
* Rijndael supports five different key lengths, AES only supports three.
|
|
*
|
|
* @see \phpseclib\Crypt\Rijndael:setKey()
|
|
* @see setKeyLength()
|
|
* @access public
|
|
* @param String $key
|
|
*/
|
|
function setKey($key)
|
|
{
|
|
parent::setKey($key);
|
|
|
|
if (!$this->explicit_key_length) {
|
|
$length = strlen($key);
|
|
switch (true) {
|
|
case $length <= 16:
|
|
$this->key_size = 16;
|
|
break;
|
|
case $length <= 24:
|
|
$this->key_size = 24;
|
|
break;
|
|
default:
|
|
$this->key_size = 32;
|
|
}
|
|
$this->_setEngine();
|
|
}
|
|
}
|
|
}
|