CI_Encryption: Optimizations and test cases
diff --git a/system/libraries/Encryption.php b/system/libraries/Encryption.php
index 583ddac..e03e278 100644
--- a/system/libraries/Encryption.php
+++ b/system/libraries/Encryption.php
@@ -44,7 +44,7 @@
 	 *
 	 * @var	string
 	 */
-	protected $_cipher = 'rijndael-128';
+	protected $_cipher = 'aes-128';
 
 	/**
 	 * Cipher mode
@@ -147,11 +147,9 @@
 		}
 
 		$this->initialize($params);
-
-		isset($this->_key) OR $this->_key = config_item('encryption_key');
-		if (empty($this->_key))
+		if ( ! isset($this->_key) && strlen($key = config_item('encryption_key')) > 0)
 		{
-			return show_error('Encryption: You are required to set an encryption key in your configuration.');
+			$this->_key = $key;
 		}
 
 		log_message('debug', 'Encryption Class Initialized');
@@ -324,15 +322,8 @@
 		{
 			return FALSE;
 		}
-		elseif ( ! isset($params['key']))
-		{
-			if ( ! isset($this->_key))
-			{
-				return show_error('Encryption: You are required to set an encryption key in your configuration.');
-			}
 
-			$params['key'] = $this->hkdf($this->_key, 'sha512', NULL, strlen($this->_key), 'encryption');
-		}
+		isset($params['key']) OR $params['key'] = $this->hkdf($this->_key, 'sha512', NULL, strlen($this->_key), 'encryption');
 
 		if (($data = $this->{'_'.$this->_driver.'_encrypt'}($data, $params)) === FALSE)
 		{
@@ -479,15 +470,6 @@
 		{
 			return FALSE;
 		}
-		elseif ( ! isset($params['key']))
-		{
-			if ( ! isset($this->_key))
-			{
-				return show_error('Encryption: You are required to set an encryption key in your configuration.');
-			}
-
-			$params['key'] = $this->hkdf($this->_key, 'sha512', NULL, strlen($this->_key), 'encryption');
-		}
 
 		if (isset($params['hmac_digest']))
 		{
@@ -531,6 +513,8 @@
 			$data = substr($data, $iv_size);
 		}
 
+		isset($params['key']) OR $params['key'] = $this->hkdf($this->_key, 'sha512', NULL, strlen($this->_key), 'encryption');
+
 		return $this->{'_'.$this->_driver.'_decrypt'}($data, $params);
 	}
 
@@ -684,7 +668,7 @@
 			}
 		}
 
-		if ($params['mode'] === 'gcm' OR isset($params['hmac']) && $params['hmac'] === FALSE)
+		if ($params['mode'] === 'gcm' OR (isset($params['hmac']) && $params['hmac'] === FALSE))
 		{
 			$params['hmac_digest'] = $params['hmac_key'] = NULL;
 		}
@@ -884,9 +868,17 @@
 	 */
 	public function __get($key)
 	{
-		return in_array($key, array('cipher', 'mode', 'driver', 'drivers', 'digests'), TRUE)
-			? $this->{'_'.$key}
-			: NULL;
+		// Because aliases
+		if ($key === 'mode')
+		{
+			return array_search($this->_mode, $this->_modes[$this->_driver], TRUE);
+		}
+		elseif (in_array($key, array('cipher', 'driver', 'drivers', 'digests'), TRUE))
+		{
+			return $this->{'_'.$key};
+		}
+
+		return NULL;
 	}
 
 }