diff --git a/apps/encryption/lib/crypto/crypt.php b/apps/encryption/lib/crypto/crypt.php
index 974e0038afc3ce4253c5f5564fd2fe2ab06f131f..91f986611bef60fc22f6cc2176e54b25416bfa94 100644
--- a/apps/encryption/lib/crypto/crypt.php
+++ b/apps/encryption/lib/crypto/crypt.php
@@ -67,6 +67,8 @@ class Crypt {
 	}
 
 	/**
+	 * create new private/public key-pair for user
+	 *
 	 * @return array|bool
 	 */
 	public function createKeyPair() {
@@ -105,6 +107,8 @@ class Crypt {
 	}
 
 	/**
+	 * Generates a new private key
+	 *
 	 * @return resource
 	 */
 	public function getOpenSSLPKey() {
@@ -113,13 +117,16 @@ class Crypt {
 	}
 
 	/**
+	 * get openSSL Config
+	 *
 	 * @return array
 	 */
 	private function getOpenSSLConfig() {
 		$config = ['private_key_bits' => 4096];
-		$config = array_merge(\OC::$server->getConfig()->getSystemValue('openssl',
-			[]),
-			$config);
+		$config = array_merge(
+			$config,
+			$this->config->getSystemValue('openssl', [])
+		);
 		return $config;
 	}
 
@@ -186,7 +193,10 @@ class Crypt {
 	}
 
 	/**
-	 * @return mixed|string
+	 * return Cipher either from config.php or the default cipher defined in
+	 * this class
+	 *
+	 * @return string
 	 */
 	public function getCipher() {
 		$cipher = $this->config->getSystemValue('cipher', self::DEFAULT_CIPHER);
@@ -276,6 +286,8 @@ class Crypt {
 	}
 
 	/**
+	 * remove padding
+	 *
 	 * @param $padded
 	 * @return bool|string
 	 */
@@ -287,6 +299,8 @@ class Crypt {
 	}
 
 	/**
+	 * split iv from encrypted content
+	 *
 	 * @param $catFile
 	 * @return array
 	 */
@@ -356,6 +370,8 @@ class Crypt {
 	}
 
 	/**
+	 * generate initialization vector
+	 *
 	 * @return string
 	 * @throws GenericEncryptionException
 	 */
@@ -396,31 +412,6 @@ class Crypt {
 		return $key;
 	}
 
-	/**
-	 * Check if a file's contents contains an IV and is symmetrically encrypted
-	 *
-	 * @param $content
-	 * @return bool
-	 */
-	public function isCatFileContent($content) {
-		if (!$content) {
-			return false;
-		}
-
-		$noPadding = $this->removePadding($content);
-
-		// Fetch encryption metadata from end of file
-		$meta = substr($noPadding, -22);
-
-		// Fetch identifier from start of metadata
-		$identifier = substr($meta, 0, 6);
-
-		if ($identifier === '00iv00') {
-			return true;
-		}
-		return false;
-	}
-
 	/**
 	 * @param $encKeyFile
 	 * @param $shareKey
diff --git a/apps/encryption/tests/lib/crypto/cryptTest.php b/apps/encryption/tests/lib/crypto/cryptTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..3ea576683481e2123333beb8b419878d0b4388e1
--- /dev/null
+++ b/apps/encryption/tests/lib/crypto/cryptTest.php
@@ -0,0 +1,263 @@
+<?php
+/**
+ * @author Björn Schießle <schiessle@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+
+namespace OCA\Encryption\Tests\Crypt;
+
+
+use OCA\Encryption\Crypto\Crypt;
+use Test\TestCase;
+
+class cryptTest extends TestCase {
+
+
+	/** @var \PHPUnit_Framework_MockObject_MockObject */
+	private $logger;
+
+	/** @var \PHPUnit_Framework_MockObject_MockObject */
+	private $userSession;
+
+	/** @var \PHPUnit_Framework_MockObject_MockObject */
+	private $config;
+
+	/** @var  Crypt */
+	private $crypt;
+
+	public function setUp() {
+		parent::setUp();
+
+		$this->logger = $this->getMockBuilder('OCP\ILogger')
+			->disableOriginalConstructor()
+			->getMock();
+		$this->logger->expects($this->any())
+			->method('warning')
+			->willReturn(true);
+		$this->userSession = $this->getMockBuilder('OCP\IUserSession')
+			->disableOriginalConstructor()
+			->getMock();
+		$this->config = $this->getMockBuilder('OCP\IConfig')
+			->disableOriginalConstructor()
+			->getMock();
+
+		$this->crypt = new Crypt($this->logger, $this->userSession, $this->config);
+	}
+
+	/**
+	 * test getOpenSSLConfig without any additional parameters
+	 */
+	public function testGetOpenSSLConfigBasic() {
+
+		$this->config->expects($this->once())
+			->method('getSystemValue')
+			->with($this->equalTo('openssl'), $this->equalTo([]))
+			->willReturn(array());
+
+		$result = \Test_Helper::invokePrivate($this->crypt, 'getOpenSSLConfig');
+		$this->assertSame(1, count($result));
+		$this->assertArrayHasKey('private_key_bits', $result);
+		$this->assertSame(4096, $result['private_key_bits']);
+	}
+
+	/**
+	 * test getOpenSSLConfig with additional parameters defined in config.php
+	 */
+	public function testGetOpenSSLConfig() {
+
+		$this->config->expects($this->once())
+			->method('getSystemValue')
+			->with($this->equalTo('openssl'), $this->equalTo([]))
+			->willReturn(array('foo' => 'bar', 'private_key_bits' => 1028));
+
+		$result = \Test_Helper::invokePrivate($this->crypt, 'getOpenSSLConfig');
+		$this->assertSame(2, count($result));
+		$this->assertArrayHasKey('private_key_bits', $result);
+		$this->assertArrayHasKey('foo', $result);
+		$this->assertSame(1028, $result['private_key_bits']);
+		$this->assertSame('bar', $result['foo']);
+	}
+
+
+	/**
+	 * test generateHeader
+	 */
+	public function testGenerateHeader() {
+
+		$this->config->expects($this->once())
+			->method('getSystemValue')
+			->with($this->equalTo('cipher'), $this->equalTo('AES-256-CFB'))
+			->willReturn('AES-128-CFB');
+
+		$this->assertSame('HBEGIN:cipher:AES-128-CFB:HEND',
+			$this->crypt->generateHeader()
+		);
+	}
+
+	/**
+	 * @dataProvider dataProviderGetCipher
+	 * @param string $configValue
+	 * @param string $expected
+	 */
+	public function testGetCipher($configValue, $expected) {
+
+		$this->config->expects($this->once())
+			->method('getSystemValue')
+			->with($this->equalTo('cipher'), $this->equalTo('AES-256-CFB'))
+			->willReturn($configValue);
+
+		$this->assertSame($expected,
+			$this->crypt->getCipher()
+		);
+
+	}
+
+	/**
+	 * data provider for testGetCipher
+	 *
+	 * @return array
+	 */
+	public function dataProviderGetCipher() {
+		return array(
+			array('AES-128-CFB', 'AES-128-CFB'),
+			array('AES-256-CFB', 'AES-256-CFB'),
+			array('unknown', 'AES-256-CFB')
+		);
+	}
+
+	/**
+	 * test concatIV()
+	 */
+	public function testConcatIV() {
+
+		$result = \Test_Helper::invokePrivate(
+			$this->crypt,
+			'concatIV',
+			array('content', 'my_iv'));
+
+		$this->assertSame('content00iv00my_iv',
+			$result
+		);
+	}
+
+	/**
+	 * test splitIV()
+	 */
+	public function testSplitIV() {
+		$data = 'encryptedContent00iv001234567890123456';
+		$result = \Test_Helper::invokePrivate($this->crypt, 'splitIV', array($data));
+		$this->assertTrue(is_array($result));
+		$this->assertSame(2, count($result));
+		$this->assertArrayHasKey('encrypted', $result);
+		$this->assertArrayHasKey('iv', $result);
+		$this->assertSame('encryptedContent', $result['encrypted']);
+		$this->assertSame('1234567890123456', $result['iv']);
+	}
+
+	/**
+	 * test addPadding()
+	 */
+	public function testAddPadding() {
+		$result = \Test_Helper::invokePrivate($this->crypt, 'addPadding', array('data'));
+		$this->assertSame('dataxx', $result);
+	}
+
+	/**
+	 * test removePadding()
+	 *
+	 * @dataProvider dataProviderRemovePadding
+	 * @param $data
+	 * @param $expected
+	 */
+	public function testRemovePadding($data, $expected) {
+		$result = \Test_Helper::invokePrivate($this->crypt, 'removePadding', array($data));
+		$this->assertSame($expected, $result);
+	}
+
+	/**
+	 * data provider for testRemovePadding
+	 *
+	 * @return array
+	 */
+	public function dataProviderRemovePadding()  {
+		return array(
+			array('dataxx', 'data'),
+			array('data', false)
+		);
+	}
+
+	/**
+	 * test parseHeader()
+	 */
+	public function testParseHeader() {
+
+		$header= 'HBEGIN:foo:bar:cipher:AES-256-CFB:HEND';
+		$result = \Test_Helper::invokePrivate($this->crypt, 'parseHeader', array($header));
+
+		$this->assertTrue(is_array($result));
+		$this->assertSame(2, count($result));
+		$this->assertArrayHasKey('foo', $result);
+		$this->assertArrayHasKey('cipher', $result);
+		$this->assertSame('bar', $result['foo']);
+		$this->assertSame('AES-256-CFB', $result['cipher']);
+	}
+
+	/**
+	 * test encrypt()
+	 *
+	 * @return string
+	 */
+	public function testEncrypt() {
+
+		$decrypted = 'content';
+		$password = 'password';
+		$iv = \Test_Helper::invokePrivate($this->crypt, 'generateIv');
+
+		$this->assertTrue(is_string($iv));
+		$this->assertSame(16, strlen($iv));
+
+		$result = \Test_Helper::invokePrivate($this->crypt, 'encrypt', array($decrypted, $iv, $password));
+
+		$this->assertTrue(is_string($result));
+
+		return array(
+			'password' => $password,
+			'iv' => $iv,
+			'encrypted' => $result,
+			'decrypted' => $decrypted);
+
+	}
+
+	/**
+	 * test decrypt()
+	 *
+	 * @depends testEncrypt
+	 */
+	public function testDecrypt($data) {
+
+		$result = \Test_Helper::invokePrivate(
+			$this->crypt,
+			'decrypt',
+			array($data['encrypted'], $data['iv'], $data['password']));
+
+		$this->assertSame($data['decrypted'], $result);
+
+	}
+
+}