diff options
author | Bjoern Schiessle <schiessle@owncloud.com> | 2014-07-22 17:22:15 +0200 |
---|---|---|
committer | Bjoern Schiessle <schiessle@owncloud.com> | 2014-07-23 12:14:02 +0200 |
commit | ffa6b330477193dd5f438980bd2736555aa738e6 (patch) | |
tree | 406a0590ca35b9d62568420c2e48073d7db75a36 /apps | |
parent | de9d3797ffc712f8fa3552411c82b24486461daf (diff) | |
download | nextcloud-server-ffa6b330477193dd5f438980bd2736555aa738e6.tar.gz nextcloud-server-ffa6b330477193dd5f438980bd2736555aa738e6.zip |
add unit test for aes256/aes128
Diffstat (limited to 'apps')
-rwxr-xr-x | apps/files_encryption/tests/crypt.php | 160 | ||||
-rw-r--r-- | apps/files_encryption/tests/keymanager.php | 32 |
2 files changed, 192 insertions, 0 deletions
diff --git a/apps/files_encryption/tests/crypt.php b/apps/files_encryption/tests/crypt.php index d1ff6eec7dc..5eb9580e3b4 100755 --- a/apps/files_encryption/tests/crypt.php +++ b/apps/files_encryption/tests/crypt.php @@ -96,6 +96,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase { } $this->assertTrue(\OC_FileProxy::$enabled); + \OCP\Config::deleteSystemValue('cipher'); } public static function tearDownAfterClass() { @@ -156,6 +157,24 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase { /** * @medium */ + function testSymmetricEncryptFileContentAes128() { + + # TODO: search in keyfile for actual content as IV will ensure this test always passes + + $crypted = Encryption\Crypt::symmetricEncryptFileContent($this->dataShort, 'hat', 'AES-128-CFB'); + + $this->assertNotEquals($this->dataShort, $crypted); + + + $decrypt = Encryption\Crypt::symmetricDecryptFileContent($crypted, 'hat', 'AES-128-CFB'); + + $this->assertEquals($this->dataShort, $decrypt); + + } + + /** + * @medium + */ function testSymmetricStreamEncryptShortFileContent() { $filename = 'tmp-' . uniqid() . '.test'; @@ -192,6 +211,47 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase { /** * @medium + */ + function testSymmetricStreamEncryptShortFileContentAes128() { + + $filename = 'tmp-' . uniqid() . '.test'; + + \OCP\Config::setSystemValue('cipher', 'AES-128-CFB'); + + $cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/'. $filename, $this->dataShort); + + // Test that data was successfully written + $this->assertTrue(is_int($cryptedFile)); + + \OCP\Config::deleteSystemValue('cipher'); + + // Disable encryption proxy to prevent recursive calls + $proxyStatus = \OC_FileProxy::$enabled; + \OC_FileProxy::$enabled = false; + + // Get file contents without using any wrapper to get it's actual contents on disk + $retreivedCryptedFile = $this->view->file_get_contents($this->userId . '/files/' . $filename); + + // Re-enable proxy - our work is done + \OC_FileProxy::$enabled = $proxyStatus; + + // Check that the file was encrypted before being written to disk + $this->assertNotEquals($this->dataShort, $retreivedCryptedFile); + + // Get file contents with the encryption wrapper + $decrypted = file_get_contents('crypt:///' . $this->userId . '/files/'. $filename); + + // Check that decrypted data matches + $this->assertEquals($this->dataShort, $decrypted); + + // Teardown + $this->view->unlink($this->userId . '/files/' . $filename); + + Encryption\Keymanager::deleteFileKey($this->view, $filename); + } + + /** + * @medium * Test that data that is written by the crypto stream wrapper * @note Encrypted data is manually prepared and decrypted here to avoid dependency on success of stream_read * @note If this test fails with truncate content, check that enough array slices are being rejoined to form $e, as the crypt.php file may have gotten longer and broken the manual @@ -236,6 +296,106 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase { /** * @medium + * Test that data that is written by the crypto stream wrapper with AES 128 + * @note Encrypted data is manually prepared and decrypted here to avoid dependency on success of stream_read + * @note If this test fails with truncate content, check that enough array slices are being rejoined to form $e, as the crypt.php file may have gotten longer and broken the manual + * reassembly of its data + */ + function testSymmetricStreamEncryptLongFileContentAes128() { + + // Generate a a random filename + $filename = 'tmp-' . uniqid() . '.test'; + + \OCP\Config::setSystemValue('cipher', 'AES-128-CFB'); + + // Save long data as encrypted file using stream wrapper + $cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong . $this->dataLong); + + // 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; + + \OCP\Config::deleteSystemValue('cipher'); + + // Get file contents without using any wrapper to get it's actual contents on disk + $retreivedCryptedFile = $this->view->file_get_contents($this->userId . '/files/' . $filename); + + // Re-enable proxy - our work is done + \OC_FileProxy::$enabled = $proxyStatus; + + + // Check that the file was encrypted before being written to disk + $this->assertNotEquals($this->dataLong . $this->dataLong, $retreivedCryptedFile); + + $decrypted = file_get_contents('crypt:///' . $this->userId . '/files/'. $filename); + + $this->assertEquals($this->dataLong . $this->dataLong, $decrypted); + + // Teardown + + $this->view->unlink($this->userId . '/files/' . $filename); + + Encryption\Keymanager::deleteFileKey($this->view, $filename); + + } + + /** + * @medium + * Test that data that is written by the crypto stream wrapper with AES 128 + * @note Encrypted data is manually prepared and decrypted here to avoid dependency on success of stream_read + * @note If this test fails with truncate content, check that enough array slices are being rejoined to form $e, as the crypt.php file may have gotten longer and broken the manual + * reassembly of its data + */ + function testStreamDecryptLongFileContentWithoutHeader() { + + // Generate a a random filename + $filename = 'tmp-' . uniqid() . '.test'; + + \OCP\Config::setSystemValue('cipher', 'AES-128-CFB'); + + // Save long data as encrypted file using stream wrapper + $cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong . $this->dataLong); + + \OCP\Config::deleteSystemValue('cipher'); + + // 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; + + // Get file contents without using any wrapper to get it's actual contents on disk + $retreivedCryptedFile = $this->view->file_get_contents($this->userId . '/files/' . $filename); + + // Check that the file was encrypted before being written to disk + $this->assertNotEquals($this->dataLong . $this->dataLong, $retreivedCryptedFile); + + // remove the header to check if we can also decrypt old files without a header, + // this files should fall back to AES-128 + $cryptedWithoutHeader = substr($retreivedCryptedFile, Encryption\Crypt::BLOCKSIZE); + $this->view->file_put_contents($this->userId . '/files/' . $filename, $cryptedWithoutHeader); + + // Re-enable proxy - our work is done + \OC_FileProxy::$enabled = $proxyStatus; + + $decrypted = file_get_contents('crypt:///' . $this->userId . '/files/'. $filename); + + $this->assertEquals($this->dataLong . $this->dataLong, $decrypted); + + // Teardown + + $this->view->unlink($this->userId . '/files/' . $filename); + + Encryption\Keymanager::deleteFileKey($this->view, $filename); + + } + + /** + * @medium */ function testIsEncryptedContent() { diff --git a/apps/files_encryption/tests/keymanager.php b/apps/files_encryption/tests/keymanager.php index b5537837051..f90832280a2 100644 --- a/apps/files_encryption/tests/keymanager.php +++ b/apps/files_encryption/tests/keymanager.php @@ -177,6 +177,38 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase { /** * @medium */ + function testSetPrivateKey() { + + $key = "dummy key"; + + Encryption\Keymanager::setPrivateKey($key, 'dummyUser'); + + $this->assertTrue($this->view->file_exists('/dummyUser/files_encryption/dummyUser.private.key')); + + //clean up + $this->view->deleteAll('/dummyUser'); + } + + /** + * @medium + */ + function testSetPrivateSystemKey() { + + $key = "dummy key"; + $keyName = "myDummyKey.private.key"; + + Encryption\Keymanager::setPrivateSystemKey($key, $keyName); + + $this->assertTrue($this->view->file_exists('/owncloud_private_key/' . $keyName)); + + // clean up + $this->view->unlink('/owncloud_private_key/' . $keyName); + } + + + /** + * @medium + */ function testGetUserKeys() { $keys = Encryption\Keymanager::getUserKeys($this->view, $this->userId); |