*/
public function update($path, $uid, $accessList) {
$fileKey = $this->keymanager->getFileKey($path, $uid);
+ $publicKeys = array();
foreach ($accessList['users'] as $user) {
$publicKeys[$user] = $this->keymanager->getPublicKey($user);
}
+
+ if (!empty($accessList['public'])) {
+ $publicKeys[$this->keymanager->getPublicShareKeyId()] = $this->keymanager->getPublicShareKey();
+ }
+
$encryptedFileKey = $this->crypt->multiKeyEncrypt($fileKey, $publicKeys);
$this->keymanager->deleteAllFileKeys($path);
* @param \OCP\ISession $session
* @param ILogger $log
*/
- public function __construct(IStorage $keyStorage, Crypt $crypt, IConfig $config, IUserSession $userSession, ISession $session, ILogger $log) {
+ public function __construct(
+ IStorage $keyStorage,
+ Crypt $crypt,
+ IConfig $config,
+ IUserSession $userSession,
+ ISession $session,
+ ILogger $log) {
self::$session = $session;
$this->keyStorage = $keyStorage;
'recoveryKeyId');
$this->publicShareKeyId = $this->config->getAppValue('encryption',
'publicShareKeyId');
+
+ if (empty($this->publicShareKeyId)) {
+ $this->publicShareKeyId = 'pubShare_' . substr(md5(time()), 0, 8);
+ $this->config->setAppValue('encryption', 'publicShareKeyId', $this->publicShareKeyId);
+
+ $keypair = $this->crypt->createKeyPair();
+
+ // Save public key
+ $this->keyStorage->setSystemUserKey(
+ $this->publicShareKeyId . '.publicKey',
+ $keypair['publicKey']);
+
+ // Encrypt private key empty passphrase
+ $encryptedKey = $this->crypt->symmetricEncryptFileContent($keypair['privateKey'], '');
+ if ($encryptedKey) {
+ $this->keyStorage->setSystemUserKey($this->publicShareKeyId . '.privateKey', $encryptedKey);
+ } else {
+ $this->log->error('Could not create public share keys');
+ }
+
+ }
+
$this->keyId = $userSession && $userSession->isLoggedIn() ? $userSession->getUser()->getUID() : false;
$this->log = $log;
}
$encryptedFileKey = $this->keyStorage->getFileKey($path,
$this->fileKeyId);
$shareKey = $this->getShareKey($path, $uid);
- $privateKey = $this->session->get('privateKey');
+ $privateKey = self::$session->get('privateKey');
if ($encryptedFileKey && $shareKey && $privateKey) {
$key = $this->crypt->multiKeyDecrypt($encryptedFileKey,
throw new PublicKeyMissingException();
}
+ public function getPublicShareKeyId() {
+ return $this->publicShareKeyId;
+ }
+
+ /**
+ * get public key for public link shares
+ *
+ * @return string
+ */
+ public function getPublicShareKey() {
+ return $this->keyStorage->getSystemUserKey($this->publicShareKeyId . '.publicKey');
+ }
+
/**
* @param $purpose
* @param bool $timestamp
parent::__construct($logger, $userSession);
$this->crypt = $crypt;
$this->keyManager = $keyManager;
- }
+ }
/**
* @param $uid userid
\OC_Util::addStyle('encryption', 'settings-personal');
$tmpl = new OCP\Template('encryption', 'settings-personal');
+$crypt = new \OCA\Encryption\Crypto\Crypt(
+ \OC::$server->getLogger(),
+ \OC::$server->getUserSession(),
+ \OC::$server->getConfig());
+$keymanager = new \OCA\Encryption\KeyManager(
+ \OC::$server->getEncryptionKeyStorage(\OCA\Encryption\Crypto\Encryption::ID),
+ $crypt,
+ \OC::$server->getConfig(),
+ \OC::$server->getUserSession(),
+ \OC::$server->getSession(),
+ \OC::$server->getLogger());
$user = \OCP\User::getUser();
+
$view = new \OC\Files\View('/');
-$util = new \OCA\Files_Encryption\Util($view, $user);
+
+$util = new \OCA\Encryption\Util(
+ new \OC\Files\View(),
+ new \OC\Files\Filesystem(),
+ $crypt,
+ $keymanager,
+ \OC::$server->getLogger(),
+ \OC::$server->getUserSession(),
+ \OC::$server->getConfig());
+
$session = new \OCA\Files_Encryption\Session($view);
+$session = \OC::$server->getSession();
-$privateKeySet = $session->getPrivateKey() !== false;
+$privateKeySet = $session->get('privateKey') !== false;
// did we tried to initialize the keys for this session?
$initialized = $session->getInitialized();