summaryrefslogtreecommitdiffstats
path: root/apps/files_encryption/tests/encryption.php
diff options
context:
space:
mode:
authorSam Tuke <samtuke@owncloud.com>2012-07-18 18:52:00 +0100
committerSam Tuke <samtuke@owncloud.com>2012-07-18 18:52:00 +0100
commitd294e7772156dc27b6d69df405f7dcf7d7f4326f (patch)
treed822d911b13643786aff434587d07b64a16dc29f /apps/files_encryption/tests/encryption.php
parent283561823febbfb668ca33e234a01b5342e16e60 (diff)
downloadnextcloud-server-d294e7772156dc27b6d69df405f7dcf7d7f4326f.tar.gz
nextcloud-server-d294e7772156dc27b6d69df405f7dcf7d7f4326f.zip
Development snapshot:
- Added methods for sealing data with multiple keys - Added method for encrypting data, generating iv and keyfile, and returning both - Added 6 unit test cases (containing 12 tests) for Crypt class - Commented out old unit tests for now
Diffstat (limited to 'apps/files_encryption/tests/encryption.php')
-rw-r--r--apps/files_encryption/tests/encryption.php214
1 files changed, 159 insertions, 55 deletions
diff --git a/apps/files_encryption/tests/encryption.php b/apps/files_encryption/tests/encryption.php
index 286770a69f5..600e00fd3e4 100644
--- a/apps/files_encryption/tests/encryption.php
+++ b/apps/files_encryption/tests/encryption.php
@@ -6,67 +6,171 @@
* See the COPYING-README file.
*/
+require realpath( dirname(__FILE__).'/../lib/crypt.php' );
+
class Test_Encryption extends UnitTestCase {
- function testEncryption(){
- $key=uniqid();
- $file=OC::$SERVERROOT.'/3rdparty/MDB2.php';
- $source=file_get_contents($file); //nice large text file
- $encrypted=OC_Crypt::encrypt($source,$key);
- $decrypted=OC_Crypt::decrypt($encrypted,$key);
- $decrypted=rtrim($decrypted, "\0");
- $this->assertNotEqual($encrypted,$source);
- $this->assertEqual($decrypted,$source);
-
- $chunk=substr($source,0,8192);
- $encrypted=OC_Crypt::encrypt($chunk,$key);
- $this->assertEqual(strlen($chunk),strlen($encrypted));
- $decrypted=OC_Crypt::decrypt($encrypted,$key);
- $decrypted=rtrim($decrypted, "\0");
- $this->assertEqual($decrypted,$chunk);
-
- $encrypted=OC_Crypt::blockEncrypt($source,$key);
- $decrypted=OC_Crypt::blockDecrypt($encrypted,$key);
- $this->assertNotEqual($encrypted,$source);
- $this->assertEqual($decrypted,$source);
-
- $tmpFileEncrypted=OCP\Files::tmpFile();
- OC_Crypt::encryptfile($file,$tmpFileEncrypted,$key);
- $encrypted=file_get_contents($tmpFileEncrypted);
- $decrypted=OC_Crypt::blockDecrypt($encrypted,$key);
- $this->assertNotEqual($encrypted,$source);
- $this->assertEqual($decrypted,$source);
-
- $tmpFileDecrypted=OCP\Files::tmpFile();
- OC_Crypt::decryptfile($tmpFileEncrypted,$tmpFileDecrypted,$key);
- $decrypted=file_get_contents($tmpFileDecrypted);
- $this->assertEqual($decrypted,$source);
-
- $file=OC::$SERVERROOT.'/core/img/weather-clear.png';
- $source=file_get_contents($file); //binary file
- $encrypted=OC_Crypt::encrypt($source,$key);
- $decrypted=OC_Crypt::decrypt($encrypted,$key);
- $decrypted=rtrim($decrypted, "\0");
- $this->assertEqual($decrypted,$source);
-
- $encrypted=OC_Crypt::blockEncrypt($source,$key);
- $decrypted=OC_Crypt::blockDecrypt($encrypted,$key);
- $this->assertEqual($decrypted,$source);
+ function setUp() {
+
+ // set content for encrypting / decrypting in tests
+ $this->data = realpath( dirname(__FILE__).'/../lib/crypt.php' );
+
+ }
+
+ function tearDown(){}
+
+ function testGenerateKey() {
+
+ # TODO: use more accurate (larger) string length for test confirmation
+
+ $key = OCA_Encryption\Crypt::generateKey();
+
+ $this->assertTrue( strlen( $key ) > 1000 );
+
+ }
+
+ function testEncrypt() {
+
+ $random = openssl_random_pseudo_bytes( 13 );
+
+ $iv = substr( base64_encode( $random ), 0, -4 ); // i.e. E5IG033j+mRNKrht
+
+ $crypted = OCA_Encryption\Crypt::encrypt( $this->data, $iv, 'hat' );
+
+ $this->assertNotEqual( $this->data, $crypted );
+
+ }
+
+ function testDecrypt() {
+
+ $random = openssl_random_pseudo_bytes( 13 );
+
+ $iv = substr( base64_encode( $random ), 0, -4 ); // i.e. E5IG033j+mRNKrht
+
+ $crypted = OCA_Encryption\Crypt::encrypt( $this->data, $iv, 'hat' );
+
+ $decrypt = OCA_Encryption\Crypt::decrypt( $crypted, $iv, 'hat' );
+
+ $this->assertEqual( $this->data, $decrypt );
+
+ }
+
+ function testSymmetricEncryptFileContent() {
+
+ # TODO: search in keyfile for actual content as IV will ensure this test always passes
+
+ $keyfileContent = OCA_Encryption\Crypt::symmetricEncryptFileContent( $this->data, 'hat' );
+
+ $this->assertNotEqual( $this->data, $keyfileContent );
+
+
+ $decrypt = OCA_Encryption\Crypt::symmetricDecryptFileContent( $keyfileContent, 'hat' );
+
+ $this->assertEqual( $this->data, $decrypt );
+
}
- function testBinary(){
- $key=uniqid();
+ function testSymmetricEncryptFileContentKeyfile() {
- $file=__DIR__.'/binary';
- $source=file_get_contents($file); //binary file
- $encrypted=OC_Crypt::encrypt($source,$key);
- $decrypted=OC_Crypt::decrypt($encrypted,$key);
+ # TODO: search in keyfile for actual content as IV will ensure this test always passes
+
+ $crypted = OCA_Encryption\Crypt::symmetricEncryptFileContentKeyfile( $this->data );
+
+ $this->assertNotEqual( $this->data, $crypted['encrypted'] );
+
+
+ $decrypt = OCA_Encryption\Crypt::symmetricDecryptFileContent( $crypted['encrypted'], $crypted['key'] );
+
+ $this->assertEqual( $this->data, $decrypt );
+
+ }
+
+ function testMultiKeyEncrypt() {
+
+ # TODO: search in keyfile for actual content as IV will ensure this test always passes
+
+ $pair1 = OCA_Encryption\Crypt::createKeypair();
+
+ $this->assertEqual( 2, count( $pair1 ) );
+
+ $this->assertTrue( strlen( $pair1['publicKey'] ) > 1 );
+
+ $this->assertTrue( strlen( $pair1['privateKey'] ) > 1 );
+
- $decrypted=rtrim($decrypted, "\0");
- $this->assertEqual($decrypted,$source);
+ $crypted = OCA_Encryption\Crypt::multiKeyEncrypt( $this->data, array( $pair1['publicKey'] ) );
+
+ $this->assertNotEqual( $this->data, $crypted['encrypted'] );
+
- $encrypted=OC_Crypt::blockEncrypt($source,$key);
- $decrypted=OC_Crypt::blockDecrypt($encrypted,$key,strlen($source));
- $this->assertEqual($decrypted,$source);
+ $decrypt = OCA_Encryption\Crypt::multiKeyDecrypt( $crypted['encrypted'], $crypted['keys'][0], $pair1['privateKey'] );
+
+ $this->assertEqual( $this->data, $decrypt );
+
}
+
+// function testEncryption(){
+//
+// $key=uniqid();
+// $file=OC::$SERVERROOT.'/3rdparty/MDB2.php';
+// $source=file_get_contents($file); //nice large text file
+// $encrypted=OC_Crypt::encrypt($source,$key);
+// $decrypted=OC_Crypt::decrypt($encrypted,$key);
+// $decrypted=rtrim($decrypted, "\0");
+// $this->assertNotEqual($encrypted,$source);
+// $this->assertEqual($decrypted,$source);
+//
+// $chunk=substr($source,0,8192);
+// $encrypted=OC_Crypt::encrypt($chunk,$key);
+// $this->assertEqual(strlen($chunk),strlen($encrypted));
+// $decrypted=OC_Crypt::decrypt($encrypted,$key);
+// $decrypted=rtrim($decrypted, "\0");
+// $this->assertEqual($decrypted,$chunk);
+//
+// $encrypted=OC_Crypt::blockEncrypt($source,$key);
+// $decrypted=OC_Crypt::blockDecrypt($encrypted,$key);
+// $this->assertNotEqual($encrypted,$source);
+// $this->assertEqual($decrypted,$source);
+//
+// $tmpFileEncrypted=OCP\Files::tmpFile();
+// OC_Crypt::encryptfile($file,$tmpFileEncrypted,$key);
+// $encrypted=file_get_contents($tmpFileEncrypted);
+// $decrypted=OC_Crypt::blockDecrypt($encrypted,$key);
+// $this->assertNotEqual($encrypted,$source);
+// $this->assertEqual($decrypted,$source);
+//
+// $tmpFileDecrypted=OCP\Files::tmpFile();
+// OC_Crypt::decryptfile($tmpFileEncrypted,$tmpFileDecrypted,$key);
+// $decrypted=file_get_contents($tmpFileDecrypted);
+// $this->assertEqual($decrypted,$source);
+//
+// $file=OC::$SERVERROOT.'/core/img/weather-clear.png';
+// $source=file_get_contents($file); //binary file
+// $encrypted=OC_Crypt::encrypt($source,$key);
+// $decrypted=OC_Crypt::decrypt($encrypted,$key);
+// $decrypted=rtrim($decrypted, "\0");
+// $this->assertEqual($decrypted,$source);
+//
+// $encrypted=OC_Crypt::blockEncrypt($source,$key);
+// $decrypted=OC_Crypt::blockDecrypt($encrypted,$key);
+// $this->assertEqual($decrypted,$source);
+//
+// }
+//
+// function testBinary(){
+// $key=uniqid();
+//
+// $file=__DIR__.'/binary';
+// $source=file_get_contents($file); //binary file
+// $encrypted=OC_Crypt::encrypt($source,$key);
+// $decrypted=OC_Crypt::decrypt($encrypted,$key);
+//
+// $decrypted=rtrim($decrypted, "\0");
+// $this->assertEqual($decrypted,$source);
+//
+// $encrypted=OC_Crypt::blockEncrypt($source,$key);
+// $decrypted=OC_Crypt::blockDecrypt($encrypted,$key,strlen($source));
+// $this->assertEqual($decrypted,$source);
+// }
+
}