CI_Encryption::_mcrypt_decrypt PHP Method

_mcrypt_decrypt() protected method

Decrypt via MCrypt
protected _mcrypt_decrypt ( string $data, array $params ) : string
$data string Encrypted data
$params array Input parameters
return string
    protected function _mcrypt_decrypt($data, $params)
    {
        if (!is_resource($params['handle'])) {
            return FALSE;
        }
        // The greater-than-1 comparison is mostly a work-around for a bug,
        // where 1 is returned for ARCFour instead of 0.
        if (($iv_size = mcrypt_enc_get_iv_size($params['handle'])) > 1) {
            if (mcrypt_enc_get_modes_name($params['handle']) !== 'ECB') {
                $iv = self::substr($data, 0, $iv_size);
                $data = self::substr($data, $iv_size);
            } else {
                // MCrypt is dumb and this is ignored, only size matters
                $iv = str_repeat("", $iv_size);
            }
        } else {
            $iv = NULL;
        }
        if (mcrypt_generic_init($params['handle'], $params['key'], $iv) < 0) {
            if ($params['handle'] !== $this->_handle) {
                mcrypt_module_close($params['handle']);
            }
            return FALSE;
        }
        $data = mdecrypt_generic($params['handle'], $data);
        // Remove PKCS#7 padding, if necessary
        if (in_array(strtolower(mcrypt_enc_get_modes_name($params['handle'])), array('cbc', 'ecb'), TRUE)) {
            $data = self::substr($data, 0, -ord($data[self::strlen($data) - 1]));
        }
        mcrypt_generic_deinit($params['handle']);
        if ($params['handle'] !== $this->_handle) {
            mcrypt_module_close($params['handle']);
        }
        return $data;
    }