Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
Latest libraries.
- Loading branch information
1 parent
28c6880
commit 0b68f3a
Showing
4 changed files
with
2,297 additions
and
1,064 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,123 +1,58 @@ | ||
<?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 self::setKeyLength() setKeyLength()} isn't called, it'll be calculated from | ||
* {@link self::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 self::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 self::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; | ||
|
||
/** | ||
* 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 int $length | ||
* @throws \BadMethodCallException anytime it's called | ||
*/ | ||
function setBlockLength($length) | ||
{ | ||
throw new \BadMethodCallException('The block length cannot be set for AES.'); | ||
} | ||
|
||
/** | ||
* Sets the key length | ||
* | ||
* Valid key lengths are 128, 192, and 256. Set the link to bool(false) to disable a fixed key length | ||
* | ||
* @see \phpseclib\Crypt\Rijndael:setKeyLength() | ||
* @access public | ||
* @param int $length | ||
* @throws \LengthException if the key length isn't supported | ||
*/ | ||
function setKeyLength($length) | ||
{ | ||
switch ($length) { | ||
case 128: | ||
case 192: | ||
case 256: | ||
break; | ||
default: | ||
throw new \LengthException('Key of size ' . $length . ' not supported by this algorithm. Only keys of sizes 128, 192 or 256 supported'); | ||
} | ||
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 | ||
* @throws \LengthException if the key length isn't supported | ||
*/ | ||
function setKey($key) | ||
{ | ||
switch (strlen($key)) { | ||
case 16: | ||
case 24: | ||
case 32: | ||
break; | ||
default: | ||
throw new \LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported'); | ||
} | ||
|
||
parent::setKey($key); | ||
} | ||
} | ||
<?php | ||
namespace { | ||
if (!class_exists('Crypt_Rijndael')) { | ||
include_once 'Rijndael.php'; | ||
} | ||
|
||
define('CRYPT_AES_MODE_CTR', CRYPT_MODE_CTR); | ||
|
||
define('CRYPT_AES_MODE_ECB', CRYPT_MODE_ECB); | ||
|
||
define('CRYPT_AES_MODE_CBC', CRYPT_MODE_CBC); | ||
|
||
define('CRYPT_AES_MODE_CFB', CRYPT_MODE_CFB); | ||
|
||
define('CRYPT_AES_MODE_OFB', CRYPT_MODE_OFB); | ||
|
||
class Crypt_AES extends Crypt_Rijndael | ||
{ | ||
|
||
var $const_namespace = 'AES'; | ||
|
||
function setBlockLength($length) | ||
{ | ||
return; | ||
} | ||
|
||
function setKeyLength($length) | ||
{ | ||
switch ($length) { | ||
case 160: | ||
$length = 192; | ||
break; | ||
case 224: | ||
$length = 256; | ||
} | ||
parent::setKeyLength($length); | ||
} | ||
|
||
function setKey($key) | ||
{ | ||
parent::setKey($key); | ||
|
||
if (!$this->explicit_key_length) { | ||
$length = strlen($key); | ||
switch (true) { | ||
case $length <= 16: | ||
$this->key_length = 16; | ||
break; | ||
case $length <= 24: | ||
$this->key_length = 24; | ||
break; | ||
default: | ||
$this->key_length = 32; | ||
} | ||
$this->_setEngine(); | ||
} | ||
} | ||
}} |
Oops, something went wrong.