mirror of
https://github.com/phpseclib/phpseclib.git
synced 2024-11-16 02:07:09 +00:00
updates to Exceptions
This commit is contained in:
parent
c6f9807633
commit
17e6938fba
@ -40,6 +40,11 @@ use phpseclib\Crypt\Hash;
|
|||||||
use phpseclib\Common\Functions\Strings;
|
use phpseclib\Common\Functions\Strings;
|
||||||
use phpseclib\Math\BigInteger;
|
use phpseclib\Math\BigInteger;
|
||||||
use phpseclib\Math\BinaryField;
|
use phpseclib\Math\BinaryField;
|
||||||
|
use phpseclib\Exception\BadDecryptionException;
|
||||||
|
use phpseclib\Exception\BadModeException;
|
||||||
|
use phpseclib\Exception\InconsistentSetupException;
|
||||||
|
use phpseclib\Exception\InsufficientSetupException;
|
||||||
|
use phpseclib\Exception\UnsupportedAlgorithmException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base Class for all \phpseclib\Crypt\* cipher classes
|
* Base Class for all \phpseclib\Crypt\* cipher classes
|
||||||
@ -580,7 +585,7 @@ abstract class SymmetricKey
|
|||||||
*
|
*
|
||||||
* @param string $mode
|
* @param string $mode
|
||||||
* @access public
|
* @access public
|
||||||
* @throws \InvalidArgumentException if an invalid / unsupported mode is provided
|
* @throws BadModeException if an invalid / unsupported mode is provided
|
||||||
*/
|
*/
|
||||||
public function __construct($mode)
|
public function __construct($mode)
|
||||||
{
|
{
|
||||||
@ -588,7 +593,7 @@ abstract class SymmetricKey
|
|||||||
// necessary because of 5.6 compatibility; we can't do isset(self::MODE_MAP[$mode]) in 5.6
|
// necessary because of 5.6 compatibility; we can't do isset(self::MODE_MAP[$mode]) in 5.6
|
||||||
$map = self::MODE_MAP;
|
$map = self::MODE_MAP;
|
||||||
if (!isset($map[$mode])) {
|
if (!isset($map[$mode])) {
|
||||||
throw new \InvalidArgumentException('No valid mode has been specified');
|
throw new BadModeException('No valid mode has been specified');
|
||||||
}
|
}
|
||||||
|
|
||||||
$mode = self::MODE_MAP[$mode];
|
$mode = self::MODE_MAP[$mode];
|
||||||
@ -608,7 +613,7 @@ abstract class SymmetricKey
|
|||||||
break;
|
break;
|
||||||
case self::MODE_GCM:
|
case self::MODE_GCM:
|
||||||
if ($this->block_size != 16) {
|
if ($this->block_size != 16) {
|
||||||
throw new \InvalidArgumentException('GCM is only valid for block ciphers with a block size of 128 bits');
|
throw new BadModeException('GCM is only valid for block ciphers with a block size of 128 bits');
|
||||||
}
|
}
|
||||||
if (!isset(self::$gcmField)) {
|
if (!isset(self::$gcmField)) {
|
||||||
self::$gcmField = new BinaryField(128, 7, 2, 1, 0);
|
self::$gcmField = new BinaryField(128, 7, 2, 1, 0);
|
||||||
@ -616,7 +621,7 @@ abstract class SymmetricKey
|
|||||||
$this->paddable = false;
|
$this->paddable = false;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new \InvalidArgumentException('No valid mode has been specified');
|
throw new BadModeException('No valid mode has been specified');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->mode = $mode;
|
$this->mode = $mode;
|
||||||
@ -630,21 +635,21 @@ abstract class SymmetricKey
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $iv
|
* @param string $iv
|
||||||
* @throws \LengthException if the IV length isn't equal to the block size
|
* @throws \LengthException if the IV length isn't equal to the block size
|
||||||
* @throws \InvalidArgumentException if an IV is provided when one shouldn't be
|
* @throws \BadMethodCallException if an IV is provided when one shouldn't be
|
||||||
* @internal Can be overwritten by a sub class, but does not have to be
|
* @internal Can be overwritten by a sub class, but does not have to be
|
||||||
*/
|
*/
|
||||||
public function setIV($iv)
|
public function setIV($iv)
|
||||||
{
|
{
|
||||||
if ($this->mode == self::MODE_ECB) {
|
if ($this->mode == self::MODE_ECB) {
|
||||||
throw new \InvalidArgumentException('This mode does not require an IV.');
|
throw new \BadMethodCallException('This mode does not require an IV.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->mode == self::MODE_GCM) {
|
if ($this->mode == self::MODE_GCM) {
|
||||||
throw new \InvalidArgumentException('Use setNonce instead');
|
throw new \BadMethodCallException('Use setNonce instead');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->usesIV()) {
|
if (!$this->usesIV()) {
|
||||||
throw new \InvalidArgumentException('This algorithm does not use an IV.');
|
throw new \BadMethodCallExceptionn('This algorithm does not use an IV.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen($iv) != $this->block_size) {
|
if (strlen($iv) != $this->block_size) {
|
||||||
@ -667,7 +672,7 @@ abstract class SymmetricKey
|
|||||||
public function setNonce($nonce)
|
public function setNonce($nonce)
|
||||||
{
|
{
|
||||||
if ($this->mode != self::MODE_GCM) {
|
if ($this->mode != self::MODE_GCM) {
|
||||||
throw new \RuntimeException('Nonces are only used in GCM mode.');
|
throw new \BadMethodCallException('Nonces are only used in GCM mode.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->nonce = $nonce;
|
$this->nonce = $nonce;
|
||||||
@ -762,7 +767,7 @@ abstract class SymmetricKey
|
|||||||
|
|
||||||
if (is_string($this->key) && strlen($this->key) != $this->explicit_key_length) {
|
if (is_string($this->key) && strlen($this->key) != $this->explicit_key_length) {
|
||||||
$this->key = false;
|
$this->key = false;
|
||||||
throw new \LengthException('Key has already been set and is not ' .$this->explicit_key_length . ' bytes long');
|
throw new InconsistentSetupException('Key has already been set and is not ' .$this->explicit_key_length . ' bytes long');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -783,7 +788,7 @@ abstract class SymmetricKey
|
|||||||
public function setKey($key)
|
public function setKey($key)
|
||||||
{
|
{
|
||||||
if ($this->explicit_key_length !== false && strlen($key) != $this->explicit_key_length) {
|
if ($this->explicit_key_length !== false && strlen($key) != $this->explicit_key_length) {
|
||||||
throw new \LengthException('Key length has already been set to ' . $this->explicit_key_length . ' bytes and this key is ' . strlen($key) . ' bytes');
|
throw new InconsistentSetupException('Key length has already been set to ' . $this->explicit_key_length . ' bytes and this key is ' . strlen($key) . ' bytes');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->key = $key;
|
$this->key = $key;
|
||||||
@ -932,7 +937,7 @@ abstract class SymmetricKey
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new \InvalidArgumentException($method . ' is not a supported password hashing method');
|
throw new UnsupportedAlgorithmException($method . ' is not a supported password hashing method');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->setKey($key);
|
$this->setKey($key);
|
||||||
@ -1359,7 +1364,7 @@ abstract class SymmetricKey
|
|||||||
|
|
||||||
if ($this->mode == self::MODE_GCM) {
|
if ($this->mode == self::MODE_GCM) {
|
||||||
if ($this->oldtag === false) {
|
if ($this->oldtag === false) {
|
||||||
throw new \UnexpectedValueException('Authentication Tag has not been set');
|
throw new InsufficientSetupException('Authentication Tag has not been set');
|
||||||
}
|
}
|
||||||
|
|
||||||
$oldIV = $this->iv;
|
$oldIV = $this->iv;
|
||||||
@ -1379,7 +1384,7 @@ abstract class SymmetricKey
|
|||||||
$newtag = $cipher->encrypt($s);
|
$newtag = $cipher->encrypt($s);
|
||||||
if ($this->oldtag != substr($newtag, 0, strlen($newtag))) {
|
if ($this->oldtag != substr($newtag, 0, strlen($newtag))) {
|
||||||
$this->oldtag = false;
|
$this->oldtag = false;
|
||||||
throw new \UnexpectedValueException('Derived authentication tag and supplied authentication tag do not match');
|
throw new BadDecryptionException('Derived authentication tag and supplied authentication tag do not match');
|
||||||
}
|
}
|
||||||
$this->oldtag = false;
|
$this->oldtag = false;
|
||||||
return $plaintext;
|
return $plaintext;
|
||||||
@ -1679,7 +1684,7 @@ abstract class SymmetricKey
|
|||||||
public function getTag($length = 16)
|
public function getTag($length = 16)
|
||||||
{
|
{
|
||||||
if ($this->mode != self::MODE_GCM) {
|
if ($this->mode != self::MODE_GCM) {
|
||||||
throw new \RuntimeException('Only GCM mode utilizes authentication tags');
|
throw new \BadMethodCallException('Only GCM mode utilizes authentication tags');
|
||||||
}
|
}
|
||||||
|
|
||||||
// the tag is basically a single encrypted block of a 128-bit cipher. it can't be greater than 16
|
// the tag is basically a single encrypted block of a 128-bit cipher. it can't be greater than 16
|
||||||
@ -1710,7 +1715,7 @@ abstract class SymmetricKey
|
|||||||
public function setTag($tag)
|
public function setTag($tag)
|
||||||
{
|
{
|
||||||
if ($this->mode != self::MODE_GCM) {
|
if ($this->mode != self::MODE_GCM) {
|
||||||
throw new \RuntimeException('Only GCM mode utilizes authentication tags');
|
throw new \BadMethodCallException('Only GCM mode utilizes authentication tags');
|
||||||
}
|
}
|
||||||
|
|
||||||
$length = strlen($tag);
|
$length = strlen($tag);
|
||||||
@ -1981,7 +1986,7 @@ abstract class SymmetricKey
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($this->mode == self::MODE_GCM) {
|
if ($this->mode == self::MODE_GCM) {
|
||||||
throw new \RuntimeException('This mode does not run in continuous mode');
|
throw new \BadMethodCallException('This mode does not run in continuous mode');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->continuousBuffer = true;
|
$this->continuousBuffer = true;
|
||||||
@ -2246,7 +2251,7 @@ abstract class SymmetricKey
|
|||||||
|
|
||||||
if ($this->mode == self::MODE_GCM) {
|
if ($this->mode == self::MODE_GCM) {
|
||||||
if ($this->nonce === false) {
|
if ($this->nonce === false) {
|
||||||
throw new \UnexpectedValueException('No nonce has been defined');
|
throw new InsufficientSetupException('No nonce has been defined');
|
||||||
}
|
}
|
||||||
if (!in_array($this->engine, [self::ENGINE_LIBSODIUM, self::ENGINE_OPENSSL_GCM])) {
|
if (!in_array($this->engine, [self::ENGINE_LIBSODIUM, self::ENGINE_OPENSSL_GCM])) {
|
||||||
$this->setupGCM();
|
$this->setupGCM();
|
||||||
@ -2257,12 +2262,12 @@ abstract class SymmetricKey
|
|||||||
|
|
||||||
if ($this->iv === false && !in_array($this->mode, [self::MODE_STREAM, self::MODE_ECB])) {
|
if ($this->iv === false && !in_array($this->mode, [self::MODE_STREAM, self::MODE_ECB])) {
|
||||||
if ($this->mode != self::MODE_GCM || !in_array($this->engine, [self::ENGINE_LIBSODIUM, self::ENGINE_OPENSSL_GCM])) {
|
if ($this->mode != self::MODE_GCM || !in_array($this->engine, [self::ENGINE_LIBSODIUM, self::ENGINE_OPENSSL_GCM])) {
|
||||||
throw new \UnexpectedValueException('No IV has been defined');
|
throw new InsufficientSetupException('No IV has been defined');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->key === false) {
|
if ($this->key === false) {
|
||||||
throw new \UnexpectedValueException('No key has been defined');
|
throw new InsufficientSetupException('No key has been defined');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->encryptIV = $this->decryptIV = $this->iv;
|
$this->encryptIV = $this->decryptIV = $this->iv;
|
||||||
@ -2360,7 +2365,7 @@ abstract class SymmetricKey
|
|||||||
$length = ord($text[strlen($text) - 1]);
|
$length = ord($text[strlen($text) - 1]);
|
||||||
|
|
||||||
if (!$length || $length > $this->block_size) {
|
if (!$length || $length > $this->block_size) {
|
||||||
throw new \LengthException("The ciphertext has an invalid padding length ($length) compared to the block size ({$this->block_size})");
|
throw new BadDecryptionException("The ciphertext has an invalid padding length ($length) compared to the block size ({$this->block_size})");
|
||||||
}
|
}
|
||||||
|
|
||||||
return substr($text, 0, -$length);
|
return substr($text, 0, -$length);
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
namespace phpseclib\Crypt;
|
namespace phpseclib\Crypt;
|
||||||
|
|
||||||
use phpseclib\Crypt\Common\BlockCipher;
|
use phpseclib\Crypt\Common\BlockCipher;
|
||||||
|
use phpseclib\Exception\BadModeException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pure-PHP implementation of DES.
|
* Pure-PHP implementation of DES.
|
||||||
@ -585,12 +586,12 @@ class DES extends BlockCipher
|
|||||||
*
|
*
|
||||||
* @param int $mode
|
* @param int $mode
|
||||||
* @access public
|
* @access public
|
||||||
* @throws \InvalidArgumentException if an invalid / unsupported mode is provided
|
* @throws BadModeException if an invalid / unsupported mode is provided
|
||||||
*/
|
*/
|
||||||
public function __construct($mode)
|
public function __construct($mode)
|
||||||
{
|
{
|
||||||
if ($mode == self::MODE_STREAM) {
|
if ($mode == self::MODE_STREAM) {
|
||||||
throw new \InvalidArgumentException('Block ciphers cannot be ran in stream mode');
|
throw new BadModeException('Block ciphers cannot be ran in stream mode');
|
||||||
}
|
}
|
||||||
|
|
||||||
parent::__construct($mode);
|
parent::__construct($mode);
|
||||||
|
@ -38,6 +38,7 @@ use phpseclib\Math\PrimeField;
|
|||||||
use phpseclib\Crypt\ECDSA\Signature\ASN1 as ASN1Signature;
|
use phpseclib\Crypt\ECDSA\Signature\ASN1 as ASN1Signature;
|
||||||
use phpseclib\Exception\UnsupportedOperationException;
|
use phpseclib\Exception\UnsupportedOperationException;
|
||||||
use phpseclib\Exception\NoKeyLoadedException;
|
use phpseclib\Exception\NoKeyLoadedException;
|
||||||
|
use phpseclib\Exception\InsufficientSetupException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pure-PHP FIPS 186-4 compliant implementation of DSA.
|
* Pure-PHP FIPS 186-4 compliant implementation of DSA.
|
||||||
@ -200,7 +201,7 @@ class DSA extends AsymmetricKey
|
|||||||
} else if (!count($args)) {
|
} else if (!count($args)) {
|
||||||
$private = self::createParameters();
|
$private = self::createParameters();
|
||||||
} else {
|
} else {
|
||||||
throw new \InvalidArgumentException('Valid parameters are either two integers (L and N), a single DSA object or no parameters at all.');
|
throw new InsufficientSetupException('Valid parameters are either two integers (L and N), a single DSA object or no parameters at all.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$private->x = BigInteger::randomRange(self::$one, $private->q->subtract(self::$one));
|
$private->x = BigInteger::randomRange(self::$one, $private->q->subtract(self::$one));
|
||||||
@ -465,7 +466,7 @@ class DSA extends AsymmetricKey
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (empty($this->p)) {
|
if (empty($this->p)) {
|
||||||
throw new \RuntimeException('DSA Prime P is not set');
|
throw new InsufficientSetupException('DSA Prime P is not set');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods())) {
|
if (self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods())) {
|
||||||
@ -552,7 +553,7 @@ class DSA extends AsymmetricKey
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (empty($this->p)) {
|
if (empty($this->p)) {
|
||||||
throw new \RuntimeException('DSA Prime P is not set');
|
throw new InsufficientSetupException('DSA Prime P is not set');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods())) {
|
if (self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods())) {
|
||||||
|
@ -34,7 +34,9 @@ use phpseclib\Math\BigInteger;
|
|||||||
use phpseclib\Crypt\Common\AsymmetricKey;
|
use phpseclib\Crypt\Common\AsymmetricKey;
|
||||||
use phpseclib\Exception\UnsupportedCurveException;
|
use phpseclib\Exception\UnsupportedCurveException;
|
||||||
use phpseclib\Exception\UnsupportedOperationException;
|
use phpseclib\Exception\UnsupportedOperationException;
|
||||||
|
use phpseclib\Exception\UnsupportedAlgorithmException;
|
||||||
use phpseclib\Exception\NoKeyLoadedException;
|
use phpseclib\Exception\NoKeyLoadedException;
|
||||||
|
use phpseclib\Exception\InsufficientSetupException;
|
||||||
use phpseclib\File\ASN1;
|
use phpseclib\File\ASN1;
|
||||||
use phpseclib\File\ASN1\Maps\ECParameters;
|
use phpseclib\File\ASN1\Maps\ECParameters;
|
||||||
use phpseclib\Crypt\ECDSA\BaseCurves\TwistedEdwards as TwistedEdwardsCurve;
|
use phpseclib\Crypt\ECDSA\BaseCurves\TwistedEdwards as TwistedEdwardsCurve;
|
||||||
@ -216,11 +218,11 @@ class ECDSA extends AsymmetricKey
|
|||||||
|
|
||||||
if ($components['curve'] instanceof Ed25519 && $this->hashManuallySet && $this->hash->getHash() != 'sha512') {
|
if ($components['curve'] instanceof Ed25519 && $this->hashManuallySet && $this->hash->getHash() != 'sha512') {
|
||||||
$this->clearKey();
|
$this->clearKey();
|
||||||
throw new \RuntimeException('Ed25519 only supports sha512 as a hash');
|
throw new UnsupportedAlgorithmException('Ed25519 only supports sha512 as a hash');
|
||||||
}
|
}
|
||||||
if ($components['curve'] instanceof Ed448 && $this->hashManuallySet && $this->hash->getHash() != 'shake256-912') {
|
if ($components['curve'] instanceof Ed448 && $this->hashManuallySet && $this->hash->getHash() != 'shake256-912') {
|
||||||
$this->clearKey();
|
$this->clearKey();
|
||||||
throw new \RuntimeException('Ed448 only supports shake256 with a length of 114 bytes');
|
throw new UnsupportedAlgorithmException('Ed448 only supports shake256 with a length of 114 bytes');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->curve = $components['curve'];
|
$this->curve = $components['curve'];
|
||||||
@ -426,7 +428,7 @@ class ECDSA extends AsymmetricKey
|
|||||||
public function getEngine()
|
public function getEngine()
|
||||||
{
|
{
|
||||||
if (!isset($this->curve)) {
|
if (!isset($this->curve)) {
|
||||||
throw new \RuntimeException('getEngine should not be called until after a key has been loaded');
|
throw new InsufficientSetupException('getEngine should not be called until after a key has been loaded');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->curve instanceof TwistedEdwardsCurve) {
|
if ($this->curve instanceof TwistedEdwardsCurve) {
|
||||||
@ -455,10 +457,10 @@ class ECDSA extends AsymmetricKey
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!is_string($context)) {
|
if (!is_string($context)) {
|
||||||
throw new \RuntimeException('setContext expects a string');
|
throw new \InvalidArgumentException('setContext expects a string');
|
||||||
}
|
}
|
||||||
if (strlen($context) > 255) {
|
if (strlen($context) > 255) {
|
||||||
throw new \RuntimeException('The context is supposed to be, at most, 255 bytes long');
|
throw new \LengthException('The context is supposed to be, at most, 255 bytes long');
|
||||||
}
|
}
|
||||||
$this->context = $context;
|
$this->context = $context;
|
||||||
}
|
}
|
||||||
@ -472,10 +474,10 @@ class ECDSA extends AsymmetricKey
|
|||||||
public function setHash($hash)
|
public function setHash($hash)
|
||||||
{
|
{
|
||||||
if ($this->curve instanceof Ed25519 && $this->hash != 'sha512') {
|
if ($this->curve instanceof Ed25519 && $this->hash != 'sha512') {
|
||||||
throw new \RuntimeException('Ed25519 only supports sha512 as a hash');
|
throw new UnsupportedAlgorithmException('Ed25519 only supports sha512 as a hash');
|
||||||
}
|
}
|
||||||
if ($this->curve instanceof Ed448 && $this->hash != 'shake256-912') {
|
if ($this->curve instanceof Ed448 && $this->hash != 'shake256-912') {
|
||||||
throw new \RuntimeException('Ed448 only supports shake256 with a length of 114 bytes');
|
throw new UnsupportedAlgorithmException('Ed448 only supports shake256 with a length of 114 bytes');
|
||||||
}
|
}
|
||||||
|
|
||||||
parent::setHash($hash);
|
parent::setHash($hash);
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
namespace phpseclib\Crypt;
|
namespace phpseclib\Crypt;
|
||||||
|
|
||||||
use phpseclib\Crypt\Common\BlockCipher;
|
use phpseclib\Crypt\Common\BlockCipher;
|
||||||
|
use phpseclib\Exception\BadModeException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pure-PHP implementation of RC2.
|
* Pure-PHP implementation of RC2.
|
||||||
@ -271,7 +272,7 @@ class RC2 extends BlockCipher
|
|||||||
public function __construct($mode)
|
public function __construct($mode)
|
||||||
{
|
{
|
||||||
if ($mode == self::MODE_STREAM) {
|
if ($mode == self::MODE_STREAM) {
|
||||||
throw new \InvalidArgumentException('Block ciphers cannot be ran in stream mode');
|
throw new BadModeException('Block ciphers cannot be ran in stream mode');
|
||||||
}
|
}
|
||||||
|
|
||||||
parent::__construct($mode);
|
parent::__construct($mode);
|
||||||
|
@ -1139,7 +1139,7 @@ class RSA extends AsymmetricKey
|
|||||||
* @access private
|
* @access private
|
||||||
* @param string $m
|
* @param string $m
|
||||||
* @param string $l
|
* @param string $l
|
||||||
* @throws \OutOfBoundsException if strlen($m) > $this->k - 2 * $this->hLen - 2
|
* @throws \LengthException if strlen($m) > $this->k - 2 * $this->hLen - 2
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
private function rsaes_oaep_encrypt($m, $l = '')
|
private function rsaes_oaep_encrypt($m, $l = '')
|
||||||
@ -1152,7 +1152,7 @@ class RSA extends AsymmetricKey
|
|||||||
// be output.
|
// be output.
|
||||||
|
|
||||||
if ($mLen > $this->k - 2 * $this->hLen - 2) {
|
if ($mLen > $this->k - 2 * $this->hLen - 2) {
|
||||||
throw new \OutOfBoundsException('Message too long');
|
throw new \LengthException('Message too long');
|
||||||
}
|
}
|
||||||
|
|
||||||
// EME-OAEP encoding
|
// EME-OAEP encoding
|
||||||
@ -1257,12 +1257,12 @@ class RSA extends AsymmetricKey
|
|||||||
* @access private
|
* @access private
|
||||||
* @param string $m
|
* @param string $m
|
||||||
* @return bool|string
|
* @return bool|string
|
||||||
* @throws \OutOfBoundsException if strlen($m) > $this->k
|
* @throws \LengthException if strlen($m) > $this->k
|
||||||
*/
|
*/
|
||||||
private function raw_encrypt($m)
|
private function raw_encrypt($m)
|
||||||
{
|
{
|
||||||
if (strlen($m) > $this->k) {
|
if (strlen($m) > $this->k) {
|
||||||
throw new \OutOfBoundsException('Message too long');
|
throw new \LengthException('Message too long');
|
||||||
}
|
}
|
||||||
|
|
||||||
$temp = $this->os2ip($m);
|
$temp = $this->os2ip($m);
|
||||||
@ -1278,7 +1278,7 @@ class RSA extends AsymmetricKey
|
|||||||
* @access private
|
* @access private
|
||||||
* @param string $m
|
* @param string $m
|
||||||
* @param bool $pkcs15_compat optional
|
* @param bool $pkcs15_compat optional
|
||||||
* @throws \OutOfBoundsException if strlen($m) > $this->k - 11
|
* @throws \LengthException if strlen($m) > $this->k - 11
|
||||||
* @return bool|string
|
* @return bool|string
|
||||||
*/
|
*/
|
||||||
private function rsaes_pkcs1_v1_5_encrypt($m, $pkcs15_compat = false)
|
private function rsaes_pkcs1_v1_5_encrypt($m, $pkcs15_compat = false)
|
||||||
@ -1288,7 +1288,7 @@ class RSA extends AsymmetricKey
|
|||||||
// Length checking
|
// Length checking
|
||||||
|
|
||||||
if ($mLen > $this->k - 11) {
|
if ($mLen > $this->k - 11) {
|
||||||
throw new \OutOfBoundsException('Message too long');
|
throw new \LengthException('Message too long');
|
||||||
}
|
}
|
||||||
|
|
||||||
// EME-PKCS1-v1_5 encoding
|
// EME-PKCS1-v1_5 encoding
|
||||||
|
@ -57,6 +57,9 @@ namespace phpseclib\Crypt;
|
|||||||
use phpseclib\Crypt\Common\BlockCipher;
|
use phpseclib\Crypt\Common\BlockCipher;
|
||||||
|
|
||||||
use phpseclib\Common\Functions\Strings;
|
use phpseclib\Common\Functions\Strings;
|
||||||
|
use phpseclib\Exception\BadModeException;
|
||||||
|
use phpseclib\Exception\InsufficientSetupException;
|
||||||
|
use phpseclib\Exception\BadDecryptionException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pure-PHP implementation of Rijndael.
|
* Pure-PHP implementation of Rijndael.
|
||||||
@ -172,7 +175,7 @@ class Rijndael extends BlockCipher
|
|||||||
public function __construct($mode)
|
public function __construct($mode)
|
||||||
{
|
{
|
||||||
if ($mode == self::MODE_STREAM) {
|
if ($mode == self::MODE_STREAM) {
|
||||||
throw new \InvalidArgumentException('Block ciphers cannot be ran in stream mode');
|
throw new BadModeException('Block ciphers cannot be ran in stream mode');
|
||||||
}
|
}
|
||||||
|
|
||||||
parent::__construct($mode);
|
parent::__construct($mode);
|
||||||
@ -980,7 +983,7 @@ class Rijndael extends BlockCipher
|
|||||||
switch ($this->engine) {
|
switch ($this->engine) {
|
||||||
case self::ENGINE_LIBSODIUM:
|
case self::ENGINE_LIBSODIUM:
|
||||||
if ($this->oldtag === false) {
|
if ($this->oldtag === false) {
|
||||||
throw new \UnexpectedValueException('Authentication Tag has not been set');
|
throw new InsufficientSetupException('Authentication Tag has not been set');
|
||||||
}
|
}
|
||||||
if (strlen($this->oldtag) != 16) {
|
if (strlen($this->oldtag) != 16) {
|
||||||
break;
|
break;
|
||||||
@ -988,12 +991,12 @@ class Rijndael extends BlockCipher
|
|||||||
$plaintext = sodium_crypto_aead_aes256gcm_decrypt($ciphertext . $this->oldtag, $this->aad, $this->nonce, $this->key);
|
$plaintext = sodium_crypto_aead_aes256gcm_decrypt($ciphertext . $this->oldtag, $this->aad, $this->nonce, $this->key);
|
||||||
if ($plaintext === false) {
|
if ($plaintext === false) {
|
||||||
$this->oldtag = false;
|
$this->oldtag = false;
|
||||||
throw new \UnexpectedValueException('Error decrypting ciphertext with libsodium');
|
throw new BadDecryptionException('Error decrypting ciphertext with libsodium');
|
||||||
}
|
}
|
||||||
return $plaintext;
|
return $plaintext;
|
||||||
case self::ENGINE_OPENSSL_GCM:
|
case self::ENGINE_OPENSSL_GCM:
|
||||||
if ($this->oldtag === false) {
|
if ($this->oldtag === false) {
|
||||||
throw new \UnexpectedValueException('Authentication Tag has not been set');
|
throw new InsufficientSetupException('Authentication Tag has not been set');
|
||||||
}
|
}
|
||||||
$plaintext = openssl_decrypt(
|
$plaintext = openssl_decrypt(
|
||||||
$ciphertext,
|
$ciphertext,
|
||||||
@ -1006,7 +1009,7 @@ class Rijndael extends BlockCipher
|
|||||||
);
|
);
|
||||||
if ($plaintext === false) {
|
if ($plaintext === false) {
|
||||||
$this->oldtag = false;
|
$this->oldtag = false;
|
||||||
throw new \UnexpectedValueException('Error decrypting ciphertext with OpenSSL');
|
throw new BadDecryptionException('Error decrypting ciphertext with OpenSSL');
|
||||||
}
|
}
|
||||||
return $plaintext;
|
return $plaintext;
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
namespace phpseclib\Crypt;
|
namespace phpseclib\Crypt;
|
||||||
|
|
||||||
use phpseclib\Crypt\Common\BlockCipher;
|
use phpseclib\Crypt\Common\BlockCipher;
|
||||||
|
use phpseclib\Exception\BadModeException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pure-PHP implementation of Twofish.
|
* Pure-PHP implementation of Twofish.
|
||||||
@ -375,12 +376,12 @@ class Twofish extends BlockCipher
|
|||||||
*
|
*
|
||||||
* @param int $mode
|
* @param int $mode
|
||||||
* @access public
|
* @access public
|
||||||
* @throws \InvalidArgumentException if an invalid / unsupported mode is provided
|
* @throws BadModeException if an invalid / unsupported mode is provided
|
||||||
*/
|
*/
|
||||||
public function __construct($mode)
|
public function __construct($mode)
|
||||||
{
|
{
|
||||||
if ($mode == self::MODE_STREAM) {
|
if ($mode == self::MODE_STREAM) {
|
||||||
throw new \InvalidArgumentException('Block ciphers cannot be ran in stream mode');
|
throw new BadModeException('Block ciphers cannot be ran in stream mode');
|
||||||
}
|
}
|
||||||
|
|
||||||
parent::__construct($mode);
|
parent::__construct($mode);
|
||||||
|
26
phpseclib/Exception/BadDecryptionException.php
Normal file
26
phpseclib/Exception/BadDecryptionException.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BadDecryptionException
|
||||||
|
*
|
||||||
|
* PHP version 5
|
||||||
|
*
|
||||||
|
* @category Exception
|
||||||
|
* @package BadDecryptionException
|
||||||
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
|
* @copyright 2015 Jim Wigginton
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||||
|
* @link http://phpseclib.sourceforge.net
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpseclib\Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BadDecryptionException
|
||||||
|
*
|
||||||
|
* @package BadDecryptionException
|
||||||
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
|
*/
|
||||||
|
class BadDecryptionException extends \RuntimeException
|
||||||
|
{
|
||||||
|
}
|
26
phpseclib/Exception/BadModeException.php
Normal file
26
phpseclib/Exception/BadModeException.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BadModeException
|
||||||
|
*
|
||||||
|
* PHP version 5
|
||||||
|
*
|
||||||
|
* @category Exception
|
||||||
|
* @package BadModeException
|
||||||
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
|
* @copyright 2015 Jim Wigginton
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||||
|
* @link http://phpseclib.sourceforge.net
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpseclib\Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BadModeException
|
||||||
|
*
|
||||||
|
* @package BadModeException
|
||||||
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
|
*/
|
||||||
|
class BadModeException extends \RuntimeException
|
||||||
|
{
|
||||||
|
}
|
26
phpseclib/Exception/InconsistentSetupException.php
Normal file
26
phpseclib/Exception/InconsistentSetupException.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* InconsistentSetupException
|
||||||
|
*
|
||||||
|
* PHP version 5
|
||||||
|
*
|
||||||
|
* @category Exception
|
||||||
|
* @package InconsistentSetupException
|
||||||
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
|
* @copyright 2015 Jim Wigginton
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||||
|
* @link http://phpseclib.sourceforge.net
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpseclib\Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* InconsistentSetupException
|
||||||
|
*
|
||||||
|
* @package InconsistentSetupException
|
||||||
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
|
*/
|
||||||
|
class InconsistentSetupException extends \RuntimeException
|
||||||
|
{
|
||||||
|
}
|
26
phpseclib/Exception/InsufficientSetupException.php
Normal file
26
phpseclib/Exception/InsufficientSetupException.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* InsufficientSetupException
|
||||||
|
*
|
||||||
|
* PHP version 5
|
||||||
|
*
|
||||||
|
* @category Exception
|
||||||
|
* @package InsufficientSetupException
|
||||||
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
|
* @copyright 2015 Jim Wigginton
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||||
|
* @link http://phpseclib.sourceforge.net
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpseclib\Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* InsufficientSetupException
|
||||||
|
*
|
||||||
|
* @package InsufficientSetupException
|
||||||
|
* @author Jim Wigginton <terrafrost@php.net>
|
||||||
|
*/
|
||||||
|
class InsufficientSetupException extends \RuntimeException
|
||||||
|
{
|
||||||
|
}
|
@ -1633,7 +1633,7 @@ class SSH2
|
|||||||
extract(unpack('Ctype', Strings::shift($response, 1)));
|
extract(unpack('Ctype', Strings::shift($response, 1)));
|
||||||
/** @var integer $type */
|
/** @var integer $type */
|
||||||
if ($type != NET_SSH2_MSG_KEXDH_GEX_GROUP) {
|
if ($type != NET_SSH2_MSG_KEXDH_GEX_GROUP) {
|
||||||
throw new \RuntimeException('Expected SSH_MSG_KEX_DH_GEX_GROUP');
|
throw new \UnexpectedValueException('Expected SSH_MSG_KEX_DH_GEX_GROUP');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen($response) < 4) {
|
if (strlen($response) < 4) {
|
||||||
|
@ -348,7 +348,7 @@ abstract class Unit_Crypt_AES_TestCase extends PhpseclibTestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException \LengthException
|
* @expectedException \phpseclib\Exception\InconsistentSetupException
|
||||||
*/
|
*/
|
||||||
public function testSetKeyLengthWithLargerKey()
|
public function testSetKeyLengthWithLargerKey()
|
||||||
{
|
{
|
||||||
@ -363,7 +363,7 @@ abstract class Unit_Crypt_AES_TestCase extends PhpseclibTestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException \LengthException
|
* @expectedException \phpseclib\Exception\InconsistentSetupException
|
||||||
*/
|
*/
|
||||||
public function testSetKeyLengthWithSmallerKey()
|
public function testSetKeyLengthWithSmallerKey()
|
||||||
{
|
{
|
||||||
@ -409,7 +409,7 @@ abstract class Unit_Crypt_AES_TestCase extends PhpseclibTestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException \UnexpectedValueException
|
* @expectedException \phpseclib\Exception\InsufficientSetupException
|
||||||
*/
|
*/
|
||||||
public function testNoKey()
|
public function testNoKey()
|
||||||
{
|
{
|
||||||
|
@ -67,7 +67,7 @@ p0GbMJDyR4e9T04ZZwIDAQAB
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException \OutOfBoundsException
|
* @expectedException \LengthException
|
||||||
*/
|
*/
|
||||||
public function testSmallModulo()
|
public function testSmallModulo()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user