summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2012-04-17 20:56:53 +0200
committerRobin Appelman <icewind@owncloud.com>2012-04-18 20:54:28 +0200
commit26e9a0dd139a94d6876df0be49a8d40b8976d65a (patch)
tree7bd818e60acc5f6697a3e129aca6989fa1369400 /apps
parent57b8ff890c75169521041b4eb9cdf4582b68e551 (diff)
downloadnextcloud-server-26e9a0dd139a94d6876df0be49a8d40b8976d65a.tar.gz
nextcloud-server-26e9a0dd139a94d6876df0be49a8d40b8976d65a.zip
bugfixes for encryption library and test cases
Diffstat (limited to 'apps')
-rw-r--r--apps/files_encryption/lib/crypt.php55
-rw-r--r--apps/files_encryption/tests/encryption.php36
2 files changed, 64 insertions, 27 deletions
diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php
index 246d4f672db..8cf9451c63c 100644
--- a/apps/files_encryption/lib/crypt.php
+++ b/apps/files_encryption/lib/crypt.php
@@ -119,7 +119,7 @@ class OC_Crypt {
*/
public static function encrypt( $content, $key='') {
$bf = self::getBlowfish($key);
- return($bf->encrypt($content));
+ return $bf->encrypt($content);
}
/**
@@ -132,61 +132,62 @@ class OC_Crypt {
*/
public static function decrypt( $content, $key='') {
$bf = self::getBlowfish($key);
- return($bf->decrypt($content));
+ $data=$bf->decrypt($content);
+ return rtrim($data, "\0");
}
/**
* @brief encryption of a file
- * @param $filename
- * @param $key the encryption key
+ * @param string $source
+ * @param string $target
+ * @param string $key the decryption key
*
* This function encrypts a file
*/
- public static function encryptfile( $filename, $key) {
- $handleread = fopen($filename, "rb");
- if($handleread<>FALSE) {
- $handlewrite = fopen($filename.OC_Crypt::$encription_extension, "wb");
+ public static function encryptFile( $source, $target, $key='') {
+ $handleread = fopen($source, "rb");
+ if($handleread!=FALSE) {
+ $handlewrite = fopen($target, "wb");
while (!feof($handleread)) {
$content = fread($handleread, 8192);
$enccontent=OC_CRYPT::encrypt( $content, $key);
fwrite($handlewrite, $enccontent);
}
fclose($handlewrite);
- unlink($filename);
+ fclose($handleread);
}
- fclose($handleread);
}
- /**
- * @brief decryption of a file
- * @param $filename
- * @param $key the decryption key
- *
- * This function decrypts a file
- */
- public static function decryptfile( $filename, $key) {
- $handleread = fopen($filename.OC_Crypt::$encription_extension, "rb");
- if($handleread<>FALSE) {
- $handlewrite = fopen($filename, "wb");
+ /**
+ * @brief decryption of a file
+ * @param string $source
+ * @param string $target
+ * @param string $key the decryption key
+ *
+ * This function decrypts a file
+ */
+ public static function decryptFile( $source, $target, $key='') {
+ $handleread = fopen($source, "rb");
+ if($handleread!=FALSE) {
+ $handlewrite = fopen($target, "wb");
while (!feof($handleread)) {
$content = fread($handleread, 8192);
$enccontent=OC_CRYPT::decrypt( $content, $key);
fwrite($handlewrite, $enccontent);
}
fclose($handlewrite);
- unlink($filename.OC_Crypt::$encription_extension);
+ fclose($handleread);
}
- fclose($handleread);
}
/**
* encrypt data in 8192b sized blocks
*/
- public static function blockEncrypt($data){
+ public static function blockEncrypt($data, $key=''){
$result='';
while(strlen($data)){
- $result=self::encrypt(substr($data,0,8192));
+ $result.=self::encrypt(substr($data,0,8192),$key);
$data=substr($data,8192);
}
return $result;
@@ -195,10 +196,10 @@ class OC_Crypt {
/**
* decrypt data in 8192b sized blocks
*/
- public static function blockDecrypt($data){
+ public static function blockDecrypt($data, $key=''){
$result='';
while(strlen($data)){
- $result=self::decrypt(substr($data,0,8192));
+ $result.=self::decrypt(substr($data,0,8192),$key);
$data=substr($data,8192);
}
return $result;
diff --git a/apps/files_encryption/tests/encryption.php b/apps/files_encryption/tests/encryption.php
new file mode 100644
index 00000000000..140fe6b126d
--- /dev/null
+++ b/apps/files_encryption/tests/encryption.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+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);
+ $this->assertNotEqual($encrypted,$source);
+ $this->assertEqual($decrypted,$source);
+
+ $encrypted=OC_Crypt::blockEncrypt($source,$key);
+ $decrypted=OC_Crypt::blockDecrypt($encrypted,$key);
+ $this->assertNotEqual($encrypted,$source);
+ $this->assertEqual($decrypted,$source);
+
+ $tmpFileEncrypted=OC_Helper::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=OC_Helper::tmpFile();
+ OC_Crypt::decryptfile($tmpFileEncrypted,$tmpFileDecrypted,$key);
+ $decrypted=file_get_contents($tmpFileDecrypted);
+ $this->assertEqual($decrypted,$source);
+ }
+}