summaryrefslogtreecommitdiffstats
path: root/tests/codeigniter/libraries
diff options
context:
space:
mode:
authorAndrey Andreev <narf@devilix.net>2014-02-04 22:30:06 +0100
committerAndrey Andreev <narf@devilix.net>2014-02-04 22:30:06 +0100
commit50ccc38a8c07b412aad0c26afb0775a0d9be18ee (patch)
tree0bb723d69b20371e5d27000bef0918b6be981c8d /tests/codeigniter/libraries
parent177144ff7d7c8afcfd4469efabf4733879a2e570 (diff)
CI_Encryption: Fix more errors and add a 'portability' test case
Diffstat (limited to 'tests/codeigniter/libraries')
-rw-r--r--tests/codeigniter/libraries/Encryption_test.php51
1 files changed, 50 insertions, 1 deletions
diff --git a/tests/codeigniter/libraries/Encryption_test.php b/tests/codeigniter/libraries/Encryption_test.php
index 94a952677..3d091e8d8 100644
--- a/tests/codeigniter/libraries/Encryption_test.php
+++ b/tests/codeigniter/libraries/Encryption_test.php
@@ -4,13 +4,62 @@ class Encryption_test extends CI_TestCase {
public function set_up()
{
- $this->ci_set_config('encryption_key', "Encryptin'glike@boss!");
+ $this->ci_set_config('encryption_key', "\xd0\xc9\x08\xc4\xde\x52\x12\x6e\xf8\xcc\xdb\x03\xea\xa0\x3a\x5c");
$this->encryption = new CI_Encryption();
$this->ci_instance_var('encryption', $this->encryption);
}
// --------------------------------------------------------------------
+ public function test_portability()
+ {
+ if ( ! $this->encryption->drivers['mcrypt'] OR ! $this->encryption->drivers['openssl'])
+ {
+ $this->markTestAsSkipped('Both MCrypt and OpenSSL support are required for portability tests.');
+ return;
+ }
+
+ $message = 'This is a message encrypted via MCrypt and decrypted via OpenSSL, or vice-versa.';
+
+ // As it turns out, only ciphers that happened to be a US standard have a
+ // somewhat consistent implementation between MCrypt and OpenSSL, so
+ // we can only test AES, DES and TripleDES.
+ //
+ // Format is: <MCrypt cipher name>, <OpenSSL cipher name>, <key size>
+ $portable = array(
+ array('rijndael-128', 'aes-128', 16),
+ array('rijndael-128', 'aes-192', 24),
+ array('rijndael-128', 'aes-256', 32),
+ array('des', 'des', 7),
+ array('tripledes', 'des-ede3', 7),
+ array('tripledes', 'des-ede3', 14),
+ array('tripledes', 'des-ede3', 21)
+ );
+ $driver_index = array('mcrypt', 'openssl');
+
+ foreach ($portable as &$test)
+ {
+ // Add some randomness to the selected driver
+ $driver = mt_rand(0,1);
+ $params = array(
+ 'cipher' => $test[$driver],
+ 'mode' => 'cbc',
+ 'key' => openssl_random_pseudo_bytes($test[2])
+ );
+
+ $this->encryption->initialize(array('driver' => $driver_index[$driver]));
+ $ciphertext = $this->encryption->encrypt($message, $params);
+
+ $driver = (int) ! $driver;
+ $params['cipher'] = $test[$driver];
+
+ $this->encryption->initialize(array('driver' => $driver_index[$driver]));
+ $this->assertEquals($message, $this->encryption->decrypt($ciphertext, $params));
+ }
+ }
+
+ // --------------------------------------------------------------------
+
public function test_hkdf()
{
// Test vectors are described in RFC5869, Appendix A(1-3).