diff options
author | Björn Schießle <schiessle@owncloud.com> | 2013-05-18 10:33:44 +0200 |
---|---|---|
committer | Björn Schießle <schiessle@owncloud.com> | 2013-05-18 10:33:44 +0200 |
commit | 173332afccbc763fefdb47d6664afb1e46e48b66 (patch) | |
tree | fefecc1bc1b1e3700a345b32fe751e6e6be27a5c | |
parent | f70240f4308d89183e00c9620b9703d30f905a99 (diff) | |
parent | 41165afa598e828f86c07440350a5b2453dd5ddc (diff) | |
download | nextcloud-server-173332afccbc763fefdb47d6664afb1e46e48b66.tar.gz nextcloud-server-173332afccbc763fefdb47d6664afb1e46e48b66.zip |
Merge branch 'files_encryption' of github.com:owncloud/core into files_encryption
-rwxr-xr-x | apps/files_encryption/lib/crypt.php | 127 | ||||
-rwxr-xr-x | apps/files_encryption/tests/crypt.php | 49 |
2 files changed, 56 insertions, 120 deletions
diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php index 56dacc94b0c..ba588819d06 100755 --- a/apps/files_encryption/lib/crypt.php +++ b/apps/files_encryption/lib/crypt.php @@ -155,7 +155,7 @@ class Crypt { // TODO: Use DI to get \OC\Files\Filesystem out of here
// Fetch all file metadata from DB
- $metadata = \OC\Files\Filesystem::getFileInfo( $path, '' );
+ $metadata = \OC\Files\Filesystem::getFileInfo( $path);
// Return encryption status
return isset( $metadata['encrypted'] ) and ( bool )$metadata['encrypted'];
@@ -474,78 +474,9 @@ class Crypt { }
/**
- * @brief Symmetrically encrypt a file by combining encrypted component data blocks
- */
- public static function symmetricBlockEncryptFileContent( $plainContent, $key ) {
-
- $crypted = '';
-
- $remaining = $plainContent;
-
- $testarray = array();
-
- while( strlen( $remaining ) ) {
-
- //echo "\n\n\$block = ".substr( $remaining, 0, 6126 );
-
- // Encrypt a chunk of unencrypted data and add it to the rest
- $block = self::symmetricEncryptFileContent( substr( $remaining, 0, 6126 ), $key );
-
- $padded = self::addPadding( $block );
-
- $crypted .= $block;
-
- $testarray[] = $block;
-
- // Remove the data already encrypted from remaining unencrypted data
- $remaining = substr( $remaining, 6126 );
-
- }
-
- //echo "hags ";
-
- //echo "\n\n\n\$crypted = $crypted\n\n\n";
-
- //print_r($testarray);
-
- return $crypted;
-
- }
-
-
- /**
- * @brief Symmetrically decrypt a file by combining encrypted component data blocks
- */
- public static function symmetricBlockDecryptFileContent( $crypted, $key ) {
-
- $decrypted = '';
-
- $remaining = $crypted;
-
- $testarray = array();
-
- while( strlen( $remaining ) ) {
-
- $testarray[] = substr( $remaining, 0, 8192 );
-
- // Decrypt a chunk of unencrypted data and add it to the rest
- $decrypted .= self::symmetricDecryptFileContent( $remaining, $key );
-
- // Remove the data already encrypted from remaining unencrypted data
- $remaining = substr( $remaining, 8192 );
-
- }
-
- //echo "\n\n\$testarray = "; print_r($testarray);
-
- return $decrypted;
-
- }
-
- /**
- * @brief Generates a pseudo random initialisation vector
- * @return String $iv generated IV
- */
+ * @brief Generates a pseudo random initialisation vector
+ * @return String $iv generated IV
+ */
public static function generateIv() {
if ( $random = openssl_random_pseudo_bytes( 12, $strong ) ) {
@@ -571,10 +502,10 @@ class Crypt { }
- /**
- * @brief Generate a pseudo random 1024kb ASCII key
- * @returns $key Generated key
- */
+ /**
+ * @brief Generate a pseudo random 1024kb ASCII key
+ * @returns $key Generated key
+ */
public static function generateKey() {
// Generate key
@@ -597,29 +528,6 @@ class Crypt { }
- public static function changekeypasscode( $oldPassword, $newPassword ) {
-
- if ( \OCP\User::isLoggedIn() ) {
-
- $key = Keymanager::getPrivateKey( $user, $view );
-
- if ( ( $key = Crypt::symmetricDecryptFileContent($key,$oldpasswd) ) ) {
-
- if ( ( $key = Crypt::symmetricEncryptFileContent( $key, $newpasswd ) ) ) {
-
- Keymanager::setPrivateKey( $key );
-
- return true;
- }
-
- }
-
- }
-
- return false;
-
- }
-
/**
* @brief Get the blowfish encryption handeler for a key
* @param $key string (optional)
@@ -652,7 +560,7 @@ class Crypt { return $legacyEncKey;
}
-
+
/**
* @brief encrypts content using legacy blowfish system
* @param $content the cleartext message you want to encrypt
@@ -683,7 +591,7 @@ class Crypt { $decrypted = $bf->decrypt( $content );
- return $decrypted;
+ return rtrim($decrypted, "\0");;
}
@@ -713,18 +621,5 @@ class Crypt { return array( 'data' => $cryptedData['encrypted'], 'filekey' => $multiEncrypted['data'], 'sharekeys' => $multiEncrypted['keys'] );
}
-
- /**
- * @brief Re-encryptes a legacy blowfish encrypted file using AES with integrated IV
- * @param $legacyContent the legacy encrypted content to re-encrypt
- * @returns cleartext content
- *
- * This function decrypts an content
- */
- public static function legacyRecrypt( $legacyContent, $legacyPassphrase, $newPassphrase ) {
-
- // TODO: write me
-
- }
-
+
}
\ No newline at end of file diff --git a/apps/files_encryption/tests/crypt.php b/apps/files_encryption/tests/crypt.php index 69fd99d9a82..2dd644e07b4 100755 --- a/apps/files_encryption/tests/crypt.php +++ b/apps/files_encryption/tests/crypt.php @@ -340,7 +340,7 @@ class Test_Crypt extends \PHPUnit_Framework_TestCase { //print_r($r); // Join IVs and their respective data chunks - $e = array( $r[0].$r[1], $r[2].$r[3], $r[4].$r[5], $r[6].$r[7], $r[8].$r[9], $r[10].$r[11], $r[12].$r[13] );//.$r[11], $r[12].$r[13], $r[14] ); + $e = array( $r[0].$r[1], $r[2].$r[3], $r[4].$r[5], $r[6].$r[7], $r[8].$r[9], $r[10].$r[11]);//.$r[11], $r[12].$r[13], $r[14] ); //print_r($e); @@ -395,6 +395,14 @@ class Test_Crypt extends \PHPUnit_Framework_TestCase { // Test that data was successfully written $this->assertTrue( is_int( $cryptedFile ) ); + // Disable encryption proxy to prevent recursive calls + $proxyStatus = \OC_FileProxy::$enabled; + \OC_FileProxy::$enabled = false; + + $this->assertTrue(Encryption\Crypt::isEncryptedMeta($filename)); + + \OC_FileProxy::$enabled = $proxyStatus; + // Get file decrypted contents $decrypt = file_get_contents( 'crypt://' . $filename ); @@ -595,7 +603,7 @@ class Test_Crypt extends \PHPUnit_Framework_TestCase { */ function testLegacyKeyRecryptKeyfileEncrypt( $crypted ) { - $recrypted = Encryption\Crypt::LegacyKeyRecryptKeyfile( $crypted, $this->pass, $this->genPublicKey, $this->pass ); + $recrypted = Encryption\Crypt::LegacyKeyRecryptKeyfile( $crypted, $this->pass, array($this->genPublicKey), $this->pass, ''); $this->assertNotEquals( $this->dataLong, $recrypted['data'] ); @@ -616,7 +624,7 @@ class Test_Crypt extends \PHPUnit_Framework_TestCase { // Test that data was successfully written $this->assertTrue( is_int( $cryptedFile ) ); - // Get file decrypted contents + // Get file decrypted contents $decrypt = file_get_contents( 'crypt://' . $filename ); $this->assertEquals( $this->dataLong, $decrypt ); @@ -649,7 +657,7 @@ class Test_Crypt extends \PHPUnit_Framework_TestCase { $this->assertEquals( $this->dataLong, $decrypt ); - $newFolder = '/newfolder1'; + $newFolder = '/newfolder'.time(); $newFilename = 'tmp-new-'.time(); $view = new \OC\Files\View('/' . $this->userId . '/files'); $view->mkdir($newFolder); @@ -664,6 +672,39 @@ class Test_Crypt extends \PHPUnit_Framework_TestCase { $view->unlink( $newFolder ); } + function testMoveFolder() { + + $view = new \OC\Files\View('/' . $this->userId . '/files'); + + $filename = '/tmp-'.time(); + $folder = '/folder'.time(); + + $view->mkdir($folder); + + // Save long data as encrypted file using stream wrapper + $cryptedFile = file_put_contents( 'crypt://' . $folder . $filename, $this->dataLong ); + + // Test that data was successfully written + $this->assertTrue( is_int( $cryptedFile ) ); + + // Get file decrypted contents + $decrypt = file_get_contents( 'crypt://' . $folder . $filename ); + + $this->assertEquals( $this->dataLong, $decrypt ); + + $newFolder = '/newfolder'.time(); + + $view->rename( $folder, $newFolder ); + + // Get file decrypted contents + $newDecrypt = file_get_contents( 'crypt://' . $newFolder . $filename ); + + $this->assertEquals( $this->dataLong, $newDecrypt ); + + // tear down + $view->unlink( $newFolder ); + } + function testRenameFolder() { $filename = '/tmp-'.time(); |