From 37e8268447b93f6a74c69b0b489c9c3a95ed1fa5 Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Fri, 27 Mar 2015 11:43:02 +0100 Subject: [PATCH] make sharing and unsharing work --- apps/encryption/lib/crypto/encryption.php | 21 ++++++++++++++------- apps/encryption/lib/keymanager.php | 17 +++++++++++++++++ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/apps/encryption/lib/crypto/encryption.php b/apps/encryption/lib/crypto/encryption.php index f036ea42cb9..beb922afe72 100644 --- a/apps/encryption/lib/crypto/encryption.php +++ b/apps/encryption/lib/crypto/encryption.php @@ -122,11 +122,7 @@ class Encryption implements IEncryptionModule { } $encryptedKeyfiles = $this->crypt->multiKeyEncrypt($this->fileKey, $publicKeys); - - $this->keymanager->setFileKey($path, $encryptedKeyfiles['data']); - foreach ($encryptedKeyfiles['keys'] as $uid => $keyFile) { - $this->keymanager->setShareKey($path, $uid, $keyFile); - } + $this->keymanager->setAllFileKeys($path, $encryptedKeyfiles); } return $result; } @@ -218,11 +214,22 @@ class Encryption implements IEncryptionModule { * update encrypted file, e.g. give additional users access to the file * * @param string $path path to the file which should be updated + * @param string $uid of the user who performs the operation * @param array $accessList who has access to the file contains the key 'users' and 'public' * @return boolean */ - public function update($path, $accessList) { - // TODO: Implement update() method. + public function update($path, $uid, $accessList) { + $fileKey = $this->keymanager->getFileKey($path, $uid); + foreach ($accessList['users'] as $user) { + $publicKeys[$user] = $this->keymanager->getPublicKey($user); + } + $encryptedFileKey = $this->crypt->multiKeyEncrypt($fileKey, $publicKeys); + + $this->keymanager->deleteAllFileKeys($path); + + $this->keymanager->setAllFileKeys($path, $encryptedFileKey); + + return true; } /** diff --git a/apps/encryption/lib/keymanager.php b/apps/encryption/lib/keymanager.php index e03852c1f6b..fe7fe08d277 100644 --- a/apps/encryption/lib/keymanager.php +++ b/apps/encryption/lib/keymanager.php @@ -183,6 +183,19 @@ class KeyManager { return $this->keyStorage->setFileKey($path, $this->fileKeyId, $key); } + /** + * set all file keys (the file key and the corresponding share keys) + * + * @param string $path + * @param array $keys + */ + public function setAllFileKeys($path, $keys) { + $this->setFileKey($path, $keys['data']); + foreach ($keys['keys'] as $uid => $keyFile) { + $this->setShareKey($path, $uid, $keyFile); + } + } + /** * write share key to the key storage * @@ -405,6 +418,10 @@ class KeyManager { return $this->keyStorage->deleteUserKey($uid, $this->privateKeyId); } + public function deleteAllFileKeys($path) { + return $this->keyStorage->deleteAllFileKeys($path); + } + /** * @param array $userIds * @return array -- 2.39.5