Merge branch 'files_encryption' of github.com:owncloud/core into files_encryption
This commit is contained in:
commit
173332afcc
|
@ -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
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue