/** * @brief Decrypt a keyfile without knowing how it was encrypted * @param string $filePath * @param string $fileOwner * @param string $privateKey * @return bool|string * @note Checks whether file was encrypted with openssl_seal or * openssl_encrypt, and decrypts accrdingly * @note This was used when 2 types of encryption for keyfiles was used, * but now we've switched to exclusively using openssl_seal() */ public function decryptUnknownKeyfile($filePath, $fileOwner, $privateKey) { // Get the encrypted keyfile // NOTE: the keyfile format depends on how it was encrypted! At // this stage we don't know how it was encrypted $encKeyfile = Keymanager::getFileKey($this->view, $this->userId, $filePath); // We need to decrypt the keyfile // Has the file been shared yet? if ($this->userId === $fileOwner && !Keymanager::getShareKey($this->view, $this->userId, $filePath)) { // The file has no shareKey, and its keyfile must be // decrypted conventionally $plainKeyfile = Crypt::keyDecrypt($encKeyfile, $privateKey); } else { // The file has a shareKey and must use it for decryption $shareKey = Keymanager::getShareKey($this->view, $this->userId, $filePath); $plainKeyfile = Crypt::multiKeyDecrypt($encKeyfile, $shareKey, $privateKey); } return $plainKeyfile; }